我在 Amazon EC2 微型实例上设置了默认的 Ubuntu Server 12.04。我设置了常用的 PHP、Apache、MySQL 等。一切运行正常,直到我尝试通过 PHP 上传一些文件。文件大小无关紧要。即使是 5kb 的 jpeg 文件也会发生这种情况。我得到的结果是:
[Thu Nov 08 18:52:11 2012] [notice] child pid 1199 exit signal Segmentation fault (11)
当我执行相同的代码,但没有附加图像时,它可以工作(但我当然需要图像)
我必须指出,完全相同的代码在 OpenSUSE 11.1 机器上运行良好,我只是将其移到 Amazon 实例上进行进一步测试。我已经设置了几十台服务器,从未遇到过此错误。我真的被困住了,因为我找不到任何相关的东西。
uname -a 给出
Linux server 3.2.0-31-virtual #50-Ubuntu SMP Fri Sep 7 16:36:36 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Apache/2.2.22(Ubuntu),PHP 5.3.10-1ubuntu3.4
PHP变量:
post_max_size 150M
memory_limit 256M
upload_max_filesize 150M
注意:我还添加了 2Gb 的交换文件,并且在具有 1.7Gb RAM 的更大的 EC2 实例上进行了相同的测试,以防万一,结果完全相同,因此不是内存不足。
答案1
我终于解决了这个问题。原来,imagefillborder() 方法中有一个错误。我能够将其追溯到以下行,但均失败:
我必须指出,该代码在 PHP 5.2.x 上运行,所以这意味着它是 5.3.x 中新引入的错误。
我的图像尺寸是 296 px x 296 px。我正在创建圆角并用颜色填充所有四个角。失败的是右上角和右下角(请注意第二个值与图像大小匹配)。当我减少 1px 时,它会按预期工作。
真是奇怪的错误。
这一个段错误:
imagefilltoborder(Resource id #95, 296, 0, 1924607, 1924607);
imagefilltoborder(Resource id #95, 296, 296, 1924607, 1924607);
这个有效:
imagefilltoborder(Resource id #96, 296-1, 0, 11333839, 11333839);
imagefilltoborder(Resource id #96, 296-1, 296-1, 11333839, 11333839);