Сбой Apache при загрузке любого файла
Я установил Ubuntu Server 12.04 по умолчанию на микроэкземпляре Amazon EC2. Я установил обычный 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
Примечание: я также добавил файл подкачки 2 ГБ, а также протестировал его на более крупном экземпляре EC2 с 1,7 ГБ ОЗУ, на всякий случай, и результат был точно таким же, так что его памяти недостаточно.
1 ответ
Я наконец решил это. Оказывается, есть ошибка в методе imagefillborder(). Я смог отследить его до этих строк, оба не смогли:
Я должен отметить, что этот код работает на PHP 5.2.x, так что это означает, что это новая введенная ошибка в 5.3.x.
Мой размер изображения 296 px x 296 px. Я создаю закругленные углы и заливаю все четыре угла цветом. Те, которые терпят неудачу, являются верхним правым и нижним правым углами (обратите внимание, что второе значение соответствует размеру изображения). Когда я уменьшаю с 1px, это работает как положено.
Действительно странная ошибка.
Это один segfaults:
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);