当前位置: 首页 > 知识库问答 >
问题:

PHP Imagick分段故障

夏锐藻
2023-03-14

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

我在console命令上设置了一个内存限制,希望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,因此我不确定是否可以共享它。

以下是我的服务器日志:

设置内存限制。拉取URL:https://i.redd.it/gyvc8t9xdvb41.gif合并图像完成合并图像处理常规图像。不是喜剧。正在删除磁盘上的临时映像。将图像写入磁盘。分段故障(堆芯转储)

看起来这个图像宽度*高度*位深度*帧占用了超过1G的内存。需要在手之前检测到这一点。

共有1个答案

牧献
2023-03-14

分段错误是一般操作系统级错误。作为PHP的最终用户,你既不能控制它,也不能修复它。它是需要在php-src级别(在本例中特别是Imagick扩展代码)修复的东西。

简单地说,这可能是PHP本身的错误,而不是代码中的错误。

你可以做的就是用PHP编写一个bug报告。并在bug报告中提供一个回溯,让一个扩展开发人员研究如何修复这个问题。

 类似资料:
  • 问题内容: 我有一个用于捕获任何分段错误或ctrl- c的应用程序。使用下面的代码,我能够捕获分段错误,但是该处理程序一次又一次地被调用。我该如何阻止他们。供您参考,我不想退出我的申请。我只是可以小心释放所有损坏的缓冲区。 可能吗? 处理程序就是这样。 在这里,对于Segmentation故障信号,处理程序被多次调用,并且很明显MyfreeBuffers()给我释放已释放的内存的错误。我只想释放一

  • 我有一个应用程序,我用它来捕捉任何分割错误或ctrl-c。使用下面的代码,我能够捕获分段错误,但是处理程序被一次又一次地调用。我怎样才能阻止他们。告诉你,我不想退出我的申请。我只是可以小心释放所有损坏的缓冲区。 可能吗? handler是这样的。 这里的分段故障信号,处理程序被多次调用,因为明显的MyFreeBuffers()给我释放已经释放的内存的错误。我只想免费一次,但仍然不想退出应用程序。

  • 分段错误发生在 运行Glewinfo 运行VisualInfo 测试程序(详细信息如下) 调用glGetProgramInterfaceiv(详细信息如下) 使用gdb实现glewinfo的堆栈跟踪 使用gdb实现visualinfo的堆栈跟踪 下面是使用已安装的GLEW库和glfw3(3.0.3)的测试程序 编译: 运行前。/basic I设置 (否则我会得到分段错误,因为它试图使用安装的GLE

  • 我正在尝试用Objective-C编写一个波阵面OBJ文件查看器,它能够从文件中加载网格/材质/着色器。我已经为着色器和着色器程序创建了类,我正在尝试创建一个OpenGL着色器程序对象,作为着色器程序类的init方法的一部分: 但是,调用glCreateProgram会导致EXC_BAD_访问,调用[SRShader compile]也会导致EXC_BAD_访问,而[SRShader compil

  • 我有.jar文件,该文件在运行时读取一个我使用 GCC 编译器在 OSX 中编译的 .dylib 库。 应用程序在OSX 10.6.8上运行没有任何问题。 Java版本: java版本“1 . 6 . 0 _ 33”Java(TM)SE运行时环境(内部版本1 . 6 . 0 _ 33-b10-424-10m 3720)Java HotSpot(TM)64位服务器虚拟机(内部版本20.8-b01-4