将apache日志的PHP mysql_ *弃用错误静音

时间:2014-03-12 14:48:12

标签: php apache deprecated

Wordpress仍在使用不推荐使用的mysql_*函数,因此Apache的error.log文件正在膨胀。

是否有可能忽略这些特定警告,因此不会显示特定项目的mysql_*弃用错误?

例如,使用一些.htaccess条目或PHP函数。

2 个答案:

答案 0 :(得分:4)

调整错误报告级别以隐藏E_DEPRECATED内容可能不是最佳选择,因为您将无法在自己的代码中查看该信息。并且PHP没有提供足够的粒度来按功能或库过滤掉已弃用的通知。我唯一担心的是编写自己的custom error handler

(免责声明:我也不知道WordPress是否也实现了自定义错误处理程序。如果确实如此,你必须小心谨慎才能破坏它。)

如果您以前从未这样做过,那可能会很棘手。除此之外,您还需要确保自己遵守error_reporting@运算符,并在必要时中止。无论如何,一个简化而未经过测试的起点可能就是这样:

function ignore_mysql_deprecated($errno, $errstr, $errfile, $errline){
    if( $errno===E_DEPRECATED && preg_match('/^mysql_.+\(\): The mysql extension is deprecated and will be removed in the future/U', $errstr) ){
        // Ignore
        return true;
    }else{
        // Call standard error handler
        return false;
    }
}
set_error_handler('ignore_mysql_deprecated');

如果WordPress没有提供更改错误处理程序的标准机制,您始终可以使用auto_prepend_file指令插入此代码。

经过测试的解决方案

要将项目中的所有mysql_个调用静音,我们必须创建一个mute.php文件:

<?php

set_error_handler(function($errno, $errstr){
  return strpos($errstr, 'mysql_') === 0;
}, E_DEPRECATED);

并在以下行添加apache配置:

php_value auto_prepend_file mute.php

答案 1 :(得分:0)

您可以隐藏所有已弃用的警告,但我不认为您只能避免使用mysql_ *。

要禁用它,请在PHP脚本中使用它(如果此脚本中只有与mysql_ *相关的​​代码,那么更好,这样您就不会丢失任何其他已弃用的信息):

error_reporting(E_ALL ^ E_DEPRECATED);