Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 可以为库代码而不是我的代码关闭E_STRICT吗?_Php_Error Reporting - Fatal编程技术网

Php 可以为库代码而不是我的代码关闭E_STRICT吗?

Php 可以为库代码而不是我的代码关闭E_STRICT吗?,php,error-reporting,Php,Error Reporting,是否可以更改我的PHP应用程序包含的文件的错误报告级别(关闭E_STRICT)(使用include或require_一次) 我希望能够看到代码中出现的严格通知,但我使用的是PEAR MDB2,当我打开E_strict时,我会从代码中得到几页警告 我知道可以使用.htaccess文件更改每个目录的错误报告,但我认为这不适用于包含的文件。我试着把它放在pear文件夹中,但没有任何效果。您可以在运行时使用动态更改错误报告设置。以下是一个例子: // your running code using th

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

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


我知道可以使用.htaccess文件更改每个目录的
错误报告
,但我认为这不适用于包含的文件。我试着把它放在pear文件夹中,但没有任何效果。

您可以在运行时使用动态更改
错误报告设置。以下是一个例子:

// 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

不,不可能。有

ini_set('error_reporting', E_NOTICE);

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

作为一个非常肮脏的黑客,您可以扩展所有类并依赖magic
\u调用
方法。这是我脑子里想不到的,所以不要因为打字错误/脑屁就开枪打我:

class MyDb { protected $pearDb; // Instantiate this in your constructor. public function __call() { $oldReporting = error_reporting(~E_STRICT); $result = call_user_func_array(array($this->pearDb, __FUNCTION__), func_get_args()); error_reporting($oldReporting); return $result; } } 类MyDb{ protected$pearDb;//在构造函数中实例化它。 公共函数调用(){ $oldReporting=错误报告(~E_STRICT); $result=调用\用户\函数\数组(数组($this->pearDb,\函数\函数),函数\获取\参数()); 错误报告($oldReporting); 返回$result; } } 如果您想让我更详细地解决问题,请告诉我。

您可以,然后使用
$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;
}

他提出了完全不同的问题。这解决了他的问题。请允许我扩展我的答案并解释原因。他可以设置错误报告级别,进行库调用,然后将其设置回原位。@Adam Kiss:不,他不是。。。他说他想要的不是使用.htaccess,而是使用.htaccess。Asah可以更清楚地说明这一点,并表明您可以在对
ini\u set()
@Adam Kiss和gnud的两个调用之间包含库调用:我已经扩展了我的答案。请检查。您是否也可以在
错误报告()之间包含库?是的,你可以。但如果您以后使用该库中的函数,这并不能解决错误报告问题,是吗?可能是静默包含
@include
?对,这显然是一个比我的黑客更好的解决方案。不过,在忽略错误之前,您可能还需要检查$errno&E_STRICT,否则您将错过有效的警告等。@janmoesen我认为OP的问题在于库(他无法影响)导致通知和警告,他想完全关闭它们。如果不是这样,检查错误级别确实是一个好主意。