3

是否可以更改我的 PHP 应用程序包含的文件的错误报告级别(关闭 E_STRICT )includerequire_once

我希望能够看到我的代码中出现的严格通知,但我使用的是 PEAR MDB2,当我打开 E_STRICT 时,我会从该代码中收到几页警告。

我知道可以error_reporting使用 .htaccess 文件在每个目录的基础上进行更改,但我认为这不适用于包含的文件。我试着把它放在梨文件夹里,但它什么也没做。

4

4 回答 4

5

error_reporting您可以在运行时使用动态更改设置ini_set()。这是一个例子:

// your running code using the default error reporting setting

// set the error reporting level for your library calls
ini_set('error_reporting', E_NOTICE);

// make some library calls

// reset the error reporting level back to strict
ini_set('error_reporting', E_ALL & E_STRICT);

// more of your code
于 2010-02-23T15:10:35.563 回答
5

您可以定义一个自定义错误处理程序,并使用$errfile参数来确定错误的来源。如果路径与您包含的库的路径匹配,则禁止错误。否则,将其传递给 PHP 的错误报告。

据我所知,这应该会捕获由图书馆引起的任何和所有警告和通知。

因为不需要回溯,所以对于很多触发的消息来说它可能已经足够快了。

根据手册中的示例,这是未经测试的,但应该可以工作:

<?php
// error handler function
function myErrorHandler($errno, $errstr, $errfile, $errline)
{

    $library_path = "/path/to/library";
    if (substr($errfile,0,strlen($library_path))==$library_path)
    /* Don't execute PHP internal error handler */
     return true;
    else
    /* execute PHP internal error handler */
     return false;
}
于 2010-02-23T16:49:42.570 回答
0

不,不可能。有

ini_set('error_reporting', E_NOTICE);

但这会影响您所有的函数/方法调用,即使它们是在其他/库文件中定义的。

于 2010-02-23T15:13:29.380 回答
0

作为一个非常肮脏的黑客,您可以扩展所有类并依赖魔术__call方法。这超出了我的想法,所以不要因为错别字/脑残而开枪:

类 MyDb {
    受保护的$pearDb;// 在你的构造函数中实例化这个。
    公共函数 __call() {
        $oldReporting = error_reporting(~E_STRICT);
        $result = call_user_func_array(array($this->pearDb, __FUNCTION__), func_get_args());
        错误报告($oldReporting);
        返回$结果;
    }
}

如果你想让我更详细地解决它,请告诉我。

于 2010-02-23T16:33:21.327 回答