Apache-2.2
上傳任何文件時的 Apache 段錯誤
我在 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 的交換文件,並在更大的 EC2 實例上進行了相同的測試,以防萬一,結果完全一樣,所以不是記憶體不足。
我終於解決了。事實證明, imagefillborder() 方法中有一個錯誤。我能夠將其追踪到這些行,但都失敗了:
我必須注意這段程式碼在 PHP 5.2.x 上工作,所以這意味著它是 5.3.x 中新引入的錯誤。
我的圖像尺寸是 296 像素 x 296 像素。我正在創建圓角並用顏色填充所有四個角。這些失敗的是右上角和右下角(注意第二個值與圖像大小匹配)。當我減少 1px 時,它按預期工作。
真是奇怪的bug。
這一個段錯誤:
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);