PHP-致命错误-有没有办法不停止脚本?

PHP-致命错误-有没有办法不停止脚本?,php,memory,Php,Memory,我有一个简单的脚本: <?php $source = '../path/img.jpg'; $image = imagecreatefromjpeg($source); ?> 最后我得到: 致命错误:允许的内存大小134217728字节已用尽 但当我尝试做这样的事情时: <?php $source = '../path/img.jpg'; $image = @imagecreatefromjpeg($source); // Mute Fatal Error if

我有一个简单的脚本:

<?php

$source = '../path/img.jpg';
$image = imagecreatefromjpeg($source);

?>

最后我得到:

致命错误:允许的内存大小134217728字节已用尽

但当我尝试做这样的事情时:

<?php

$source = '../path/img.jpg';

$image = @imagecreatefromjpeg($source); // Mute Fatal Error
if ( !$image )
{
    die('Image file is too large');
}

?>

但它不起作用。致命错误是停止我的脚本。有没有办法改变这种情况?我想知道什么时候存在致命错误(然后我得到$image为FALSE),然后我想停止脚本,但首先我想打印关于它的信息


谢谢。

致命错误无法静音或捕获。您需要使用PHP.ini中的设置来提高PHP脚本允许的内存量,这是一个难题。如果他试图打开的文件是,比如说,200MB,它仍然会失败。请看@Machavity你是对的,它太快了,无法发布到这里。可能是一张绷带,可能他们有默认的内存设置。有时候你只需要更多的记忆。我所做的大部分工作都需要至少512M的内存,有时可达3GB,当你处理mysql上1亿行数据的统计报告时,使用3GB并不是一件难事,它就是这样。(我的服务器有56GB的ram:-)这意味着我永远不会在运行时将其设置为
-1
如果有充分的理由这样做,增加它是合理的。。。不仅仅是因为。他们使用135mb,或者是PHP爆炸的时候,这并不是全部。现在,根据他们的需要(以及他们的服务器资源),将这一数字增加到2.56亿甚至5.12亿并不是不可能的。这是合理的。您是否考虑过在处理文件之前检查文件大小?检查文件大小对(压缩的)图像没有多大好处。问题是,当使用
imagecreate*
函数时,一个微小的(高度压缩的)jpg可能会占用大量内存(主要由图像的像素大小决定)。@Mikk3lRo-Hm,我没有意识到这一点。我不怎么处理图像。不过,这是有道理的。我认为唯一的解决办法是将图像处理从主逻辑中分离出来——根据您使用它的位置,您可以使用shell命令、发送ajax请求或其他方式启动单独的进程。但不知何故,您需要在不影响主应用程序的情况下让处理脚本本身出错。然后,主应用程序可以检查“外部”处理脚本的输出,并向用户报告。我会发布一个带有建议的答案,但我认为需要更多关于您的环境的详细信息才能将其保持在几页以下;)好的,作为一个新的(自我回答的)问题发布: