Назад | Перейти на главную страницу

Ошибка Apache при загрузке любого файла

У меня установлен 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);