上传大于 100KB 的文件会失败,并出现 500 服务器错误。该网站基于 Laravel 构建,并使用 AJAX 进行文件上传。小文件可以毫无问题地加载。
我已经测试过上传相同的图像,使用 GIMP 将其缩放到小于 100KB,以及另一个缩放到大于 100KB 的图像,因此问题不可能是文件类型或与图像本身相关的任何内容,而似乎仅与文件大小有关。
我检查了 php.ini 中的最大内存、upload_max_filesize、post_max_size 的值,所有都正常。我还检查了 apache 虚拟主机是否没有最大文件大小配置。我检查了 apache 日志,它只显示 500 服务器错误,没有其他详细信息。我在其他日志文件中找不到任何线索。我调试了 jQuery 到 AJAX 的调用,并确保 PHP 端的调用函数未被调用。我尝试检查 Laravel 配置,但找不到任何可能相关的内容。
你知道文件大小限制可能来自哪里吗?或者你知道从哪里可以获取有关 500 的更多信息吗?
更新:以下是成功和失败请求的详细信息。成功情况下图像大小相同,只是缩小到 100KB 以下,失败情况下图像大小超过 100KB。
成功的请求:
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
答案1
原因是 apache mod_fcgid 默认将文件上传大小限制为 128KB。