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

PHP + AJAX не может загружать файлы размером более 100 КБ.

Загрузка файлов размером более 100 КБ завершается ошибкой сервера 500. Сайт построен на Laravel и использует AJAX для загрузки файлов. Небольшие файлы загружаются без проблем.

Я тестировал загрузку с тем же изображением, которое масштабируется с помощью GIMP до размера менее 100 КБ, и другого изображения, которое масштабируется более 100 КБ, поэтому проблема не может быть связана с типом файла или чем-либо, связанным с самим изображением, вместо этого проблема, похоже, связана только с файлом размер.

Я проверил php.ini для максимальной памяти, upload_max_filesize, post_max_size, и все в порядке. Я также проверил, что apache virtualhost не имеет конфигурации максимального размера файла. Я проверил журналы apache, и он показывает только 500 ошибок сервера без каких-либо подробностей. Я не могу найти никаких подсказок ни в одном другом файле журнала. Я отладил вызов jQuery для AJAX и убедился, что вызываемая функция на стороне PHP не вызывается. Я попытался проверить конфигурации Laravel, но не нашел ничего, что могло бы быть связано.

Есть идеи, откуда может исходить ограничение на размер файла? Или есть идеи, где получить дополнительную информацию о том, откуда идет 500?

ОБНОВЛЕНИЕ: вот детали запроса для успешного и неудачного запроса. Изображение такое же, только масштабируется до 100 КБ в успешном случае и более 100 КБ в неудачном случае.

Успешный запрос:

Request URL:http://example.com/upload_photo
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip,deflate
Accept-Language:en-US,en;q=0.8,fi;q=0.6
Connection:keep-alive
Content-Length:119826
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryhVIN89yYhJPjWZoS
Cookie:step1=d18d6d9cb707914642cc3df4501565c5c361feab%2B1; step2=d18d6d9cb707914642cc3df4501565c5c361feab%2B1; step3=d18d6d9cb707914642cc3df4501565c5c361feab%2B1; laravel_session=b6cc316fdb17ada3552da4168fa23ad35bc0f171%2B4nKoS74bQHSD9HjzIytxL3Tno2sBYbOKRPfemvHY
Host:example.com
Origin:http://example.com
Referer:http://example.com/album/21095
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
------WebKitFormBoundaryhVIN89yYhJPjWZoS
Content-Disposition: form-data; name="0"; filename="1c.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryhVIN89yYhJPjWZoS--
Response Headersview source
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:42
Content-Type:text/html
Date:Wed, 24 Sep 2014 01:20:09 GMT
Keep-Alive:timeout=5, max=99
Server:Apache/2.2.22 (Ubuntu)
Vary:Accept-Encoding
X-Powered-By:PHP/5.3.10-1ubuntu3.10

Неудачный запрос:

Request URL:h_t_t_p://example.com/upload_photo
Request Method:POST
Status Code:500 Internal Server Error
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip,deflate
Accept-Language:en-US,en;q=0.8,fi;q=0.6
Connection:keep-alive
Content-Length:142451
Content-Type:multipart/form-data; boundary=----WebKitFormBoundarycv7BVPR9y5npZxAB
Cookie:step1=d18d6d9cb707914642cc3df4501565c5c361feab%2B1; step2=d18d6d9cb707914642cc3df4501565c5c361feab%2B1; step3=d18d6d9cb707914642cc3df4501565c5c361feab%2B1; laravel_session=b6cc316fdb17ada3552da4168fa23ad35bc0f171%2B4nKoS74bQHSD9HjzIytxL3Tno2sBYbOKRPfemvHY
Host:example.com
Origin:http://example.com
Referer:http://example.com/album/21095
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
------WebKitFormBoundarycv7BVPR9y5npZxAB
Content-Disposition: form-data; name="0"; filename="1d.jpg"
Content-Type: image/jpeg


------WebKitFormBoundarycv7BVPR9y5npZxAB--
Response Headersview source
Accept-Ranges:bytes
Connection:close
Content-Encoding:gzip
Content-Length:829
Content-Type:text/html
Date:Wed, 24 Sep 2014 01:21:42 GMT
ETag:"141df4-73b-5030bebf5947d"
Last-Modified:Sun, 14 Sep 2014 19:57:01 GMT
Server:Apache/2.2.22 (Ubuntu)
Vary:Accept-Encoding

Причиной был apache mod_fcgid, который по умолчанию ограничивал размер загружаемого файла до 128 КБ.