【问题标题】:PHP Imagick Segementation FaultPHP Imagick 分段错误
【发布时间】:2020-05-07 01:52:39
【问题描述】:

我有一台便宜的 5 美元/月服务器,1G 内存为我的网站处理一些图像。在将 GIF 图像写入磁盘时,我很少会遇到 PHP Imagick 的分段错误。

我在控制台命令上设置了内存限制,希望 PHP 会首先发现问题并抛出我可以正确处理的异常,但这不起作用。

特定的问题是某些 GIF 图像导致它在这行代码处崩溃:

     echo 'Writing images to disk.' . PHP_EOL;
     $file = $img->writeImages($imageOnDIsk, true);//crashes here
     echo 'Finished writing images to disk.' . PHP_EOL;

具体的 GIF 是成人相关的 GIF,所以我不确定是否可以分享。

这是我的服务器日志:

Setting memory limit. Pulling URL: https://i.redd.it/gyvc8t9xdvb41.gif Coalescing Images Done Coalescing Images Processing regular image. Not comic. Deleting temp image on disk. Writing images to disk. Segmentation fault (core dumped)

似乎此图像宽度 * 高度 * 位深度 * 帧占用了超过 1G 的内存。需要事先检测到这一点。

【问题讨论】:

    标签: php imagick


    【解决方案1】:

    Segmentation fault 是通用操作系统级别错误。作为 PHP 的最终用户,您既无法控制它,也无法修复它。这是需要在 php-src 级别修复的东西(在这种情况下特别是 imagick 扩展代码)。

    只需将此潜在的错误放在 PHP 本身而不是您的代码中。


    您可以做的事情是提交bug report with PHP。并提供backtrace 和错误报告,让其中一位扩展开发人员研究解决此问题。

    【讨论】:

    • 那么我能做些什么来解决这个问题?我真的不想把这个小服务器升级到 2G,因为它每月要花费 10 美元而不是 5 美元。
    • 你无法修复它。除非您修复了用 C 编写的 imagick 扩展代码。但是,您可以使用 PHP 提交 bug report。有关如何提交好的错误报告的详细信息,请参阅generating a gdb backtrace
    猜你喜欢
    • 2019-01-23
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2014-07-07
    • 2015-12-30
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    相关资源
    最近更新 更多