【问题标题】:PHP - Fatal Error - is any way to not stop script? [duplicate]PHP - 致命错误 - 有什么方法可以不停止脚本吗? [复制]
【发布时间】:2017-10-17 19:03:12
【问题描述】:

我有一个简单的脚本:

<?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');
}

?>

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

谢谢。

【问题讨论】:

  • 您是否考虑过在尝试处理文件之前检查文件大小?
  • 检查文件大小对(压缩)图像没有多大好处。问题是在使用 imagecreate* 函数时,一个很小(高度压缩)的 jpg 可能会占用大量内存(主要由图像的像素大小决定)。
  • @Mikk3lRo 嗯,我没有意识到这一点。我不怎么处理图片。不过有道理。
  • 我认为您唯一的出路是将图像处理与主逻辑分开 - 根据您使用它的位置,您可能会使用 shell 命令启动一个单独的进程,发送一个 ajax 请求或者其他的东西。但不知何故,您需要让处理脚本本身出错而不影响主应用程序。然后主应用程序可以检查“外部”处理脚本的输出并向用户报告。我会发布一个带有建议的答案,但我认为需要更多关于您的环境的详细信息才能将其保持在几页以下;)
  • 好的,作为一个新的(自我回答的)问题发布:stackoverflow.com/questions/46798454/…

标签: php memory


【解决方案1】:

无法忽略或捕获致命错误。您需要使用 php.ini 中的 memory_limit 设置来提高 PHP 脚本允许的内存量

【讨论】:

  • 那是绷带。如果他试图打开的文件是 200MB,它仍然会失败
  • 另见this answer
  • @Machavity 你是对的,这里发布的答案太快了
  • 也许是创可贴,也许他们设置了默认内存。有时您只需要更多内存。我做的大多数事情我至少需要 512M 有时甚至高达 3GB 的内存,当您处理来自 mysql 的 1 亿行数据的统计报告时,使用 3GB 并不是一个创可贴,它就是这样。 (我的服务器有 56GB 内存 :-) 这就是说我永远不会在运行时将其设置为 -1,如果有充分的理由增加它是合理的......不仅仅是因为。
  • 他们正在使用 135mb,或者那是 PHP 被炸毁的时候,这并不是很多。现在取决于他们需要什么(以及他们的服务器资源)将其增加到 256M 甚至 512M 并不是不可能的。 IE。这是合理的。
猜你喜欢
  • 2015-01-28
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 2012-08-25
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多