是否可以更改我的 PHP 应用程序包含的文件的错误报告级别(关闭 E_STRICT )include
?require_once
我希望能够看到我的代码中出现的严格通知,但我使用的是 PEAR MDB2,当我打开 E_STRICT 时,我会从该代码中收到几页警告。
我知道可以error_reporting
使用 .htaccess 文件在每个目录的基础上进行更改,但我认为这不适用于包含的文件。我试着把它放在梨文件夹里,但它什么也没做。
是否可以更改我的 PHP 应用程序包含的文件的错误报告级别(关闭 E_STRICT )include
?require_once
我希望能够看到我的代码中出现的严格通知,但我使用的是 PEAR MDB2,当我打开 E_STRICT 时,我会从该代码中收到几页警告。
我知道可以error_reporting
使用 .htaccess 文件在每个目录的基础上进行更改,但我认为这不适用于包含的文件。我试着把它放在梨文件夹里,但它什么也没做。
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
您可以定义一个自定义错误处理程序,并使用$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;
}
不,不可能。有
ini_set('error_reporting', E_NOTICE);
但这会影响您所有的函数/方法调用,即使它们是在其他/库文件中定义的。
作为一个非常肮脏的黑客,您可以扩展所有类并依赖魔术__call
方法。这超出了我的想法,所以不要因为错别字/脑残而开枪:
类 MyDb { 受保护的$pearDb;// 在你的构造函数中实例化这个。 公共函数 __call() { $oldReporting = error_reporting(~E_STRICT); $result = call_user_func_array(array($this->pearDb, __FUNCTION__), func_get_args()); 错误报告($oldReporting); 返回$结果; } }
如果你想让我更详细地解决它,请告诉我。