取消Apache日志的PHP mysql_ *不推荐使用的错误

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

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

例如,带有一些.htaccess条目或PHP函数.

解决方法:

调整错误报告级别以隐藏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_调用静音,我们必须创建一个Mutate.php文件:

<?php

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

并在以下行中添加apache配置:

php_value auto_prepend_file mute.php
上一篇:java-使用Spring Security 3.1.3记住我-不建议使用的默认构造函数


下一篇:java-使用Retrofit发送POST请求时无法获取POST参数