我如何打开所有错误和警告,并将它们记录到一个文件,但要在脚本中设置所有这些(不改变php.ini中的任何内容)?

我想定义一个文件名,以便将所有错误和警告都记录到其中。


当前回答

在.htaccess文件中添加以下代码(作为php.ini文件或ini_set函数的替代):

<IfModule mod_php5.c>
php_flag log_errors on 
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on 
</IfModule>

如上所述:这是针对apache类型的服务器,而不是Nginx或其他服务器。

其他回答

在.htaccess文件中添加以下代码(作为php.ini文件或ini_set函数的替代):

<IfModule mod_php5.c>
php_flag log_errors on 
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on 
</IfModule>

如上所述:这是针对apache类型的服务器,而不是Nginx或其他服务器。

使用以下代码:

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );

然后看文件:

tail -f /tmp/php-error.log

或者从2008年开始更新这个博客条目中描述的php.ini。

简单地把这些代码放在PHP/index文件的顶部:

error_reporting(E_ALL); // Error/Exception engine, always use E_ALL

ini_set('ignore_repeated_errors', TRUE); // always use TRUE

ini_set('display_errors', FALSE); // Error/Exception display, use FALSE only in production environment or real server. Use TRUE in development environment

ini_set('log_errors', TRUE); // Error/Exception file logging engine.
ini_set('error_log', 'your/path/to/errors.log'); // Logging file path

这是我个人的简短函数

# logging
/*
[2017-03-20 3:35:43] [INFO] [file.php] Here we are
[2017-03-20 3:35:43] [ERROR] [file.php] Not good
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty

mylog ('hallo') -> INFO
mylog ('fail', 'e') -> ERROR
mylog ('next', 'd') -> DEBUG
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log
*/
function mylog($text, $level='i', $file='logs') {
    switch (strtolower($level)) {
        case 'e':
        case 'error':
            $level='ERROR';
            break;
        case 'i':
        case 'info':
            $level='INFO';
            break;
        case 'd':
        case 'debug':
            $level='DEBUG';
            break;
        default:
            $level='INFO';
    }
    error_log(date("[Y-m-d H:i:s]")."\t[".$level."]\t[".basename(__FILE__)."]\t".$text."\n", 3, $file);
}

此外,你需要“AllowOverride Options”指令来实现这个功能。(Apache 2.2.15)