我可以set_error_handler()用来捕获大多数PHP错误,但它不适用于致命(E_ERROR)错误,例如调用不存在的函数.还有另一种方法来捕捉这些错误吗?
我试图调用mail()所有错误,并运行PHP 5.2.3.
你知道从PHP致命错误恢复的任何解决方案:" 允许的内存大小......用尽 "
我有一个关闭函数,当出现致命错误时调用该函数.此函数从中创建ErrorException并记录它.
问题是:当没有更多可用内存时,它无法记录错误(我使用Zend Framework通过FirePHP登录Firebug).
所以我的意思是" 如何从中恢复 ",是如何执行基本错误日志,让Zend Framework发送标题,以便记录错误(在我的情况下在Firebug中),因为任何其他错误?
谢谢
在 PHP 中,当脚本消耗超过 memory_limit 值时,脚本会停止并出现错误。如何添加警告级别:如果我的脚本消耗超过 90Mb,我会在日志文件中收到警告,但脚本会继续运行,如果消耗超过 128Mb,仍然会崩溃?
我对 PHP 扩展或 PHP C 代码一无所知,但只要我们已经自己构建了 PHP,我们甚至可以修补代码。
在 Zend/zend_alloc.c 中我可以看到这个
if (segment_size < true_size || heap->real_size + segment_size > heap->limit) {
Run Code Online (Sandbox Code Playgroud)
在此之前添加一行并将已用内存与另一个限制进行比较并发出警告非常容易。
我可以在扩展中或通过修补 PHP 代码来完成此操作吗?为什么这还不存在?这是一个坏主意吗?这已经存在于某处吗?
为 MAX_EXECUTION_TIME 添加相同的警告似乎更困难,因为我仍然不明白计时器的处理方式。
有没有办法使用unserialize内存/大小限制?
目前我们有:
$data = unserialize($_SESSION['visits']);
Run Code Online (Sandbox Code Playgroud)
我们偶尔会得到:
PHP Fatal error: Allowed memory size of 134217728 bytes in the Unknown on line 0 (尝试分配 17645568 字节)
当访问者在短时间内进行了大量访问时(会话值存储有关访问的每个页面的信息)。
如果 的长度$_SESSION['visits']超过一百万个字符,则会导致问题,因此我可以对此进行简单检查,但是否有比这更好的解决方案:
if(strlen($_SESSION['visits']) <= 1000000) {
$data = unserialize($_SESSION['visits']);
} else {
$data = array();
}
Run Code Online (Sandbox Code Playgroud)
我认为try catch可能表现得更好,但没有被抓住:
try{
$data = unserialize($_SESSION['vists']);
} catch(\Exception $exception){
error_log('Caught memory limit');
}
Run Code Online (Sandbox Code Playgroud)
这个问题的答案不是增加内存大小。
php 手册 ( http://www.php.net/manual/en/pdostatement.execute.php ) 在返回值中提到:“成功时返回 TRUE 或失败时返回 FALSE。”
我正在用几个 PDO::execute 语句编写一个 php 脚本。当 PHP:PDO 确实返回 FALSE 时应该怎么做?停止整个脚本(调用 exit())还是继续或其他什么?Execute() 返回 false 的可能原因是什么?或者返回 false 只是一个非常理论化的场景,在卷轴直播中几乎从未发生过?