php - 为 apache 日志静音 PHP mysql_* deprecated 错误

标签 php apache deprecated

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_ 调用,我们必须创建一个 mute.php 文件:

<?php

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

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

php_value auto_prepend_file mute.php

关于php - 为 apache 日志静音 PHP mysql_* deprecated 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22355142/

相关文章:

php - 使用更多 cookie 而不仅仅是 session 哈希进行身份验证的原因是什么?

php - Magento 2 : ScopeConfig Error when I use it on\Magento\Contact\Controller\Index\Post class

apache - 使用 apache 虚拟主机重定向到其他域的 HTTPS

php - UTF-8贯穿始终

python - scikit-learn GaussianProcessRegressor vs GaussianProcess?为什么 GaussianProcess 在 0.18 版本中被弃用?

c++ - 覆盖时的 GCC 弃用消息

php - 如何从 .js 文件中的 jQuery 函数访问 PHP session 变量?

php - 在 Google GeoChart 中使用 PHP 处理从数据库中获取的数据

apache - Hadoop 发布版本令人困惑

flutter - 'showSnackBar' & 'hideCurrentSnackBar' 已弃用,不应使用