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