php 上传图片 500 Internal Server Error 错误
前言
今天准备上线一个项目然后发现图片上传不了一直500,试了很多次只有100kb左右的图片能够上传成功,应该是图片大小超出限制,报错代码如下:

思路
按道理来说如果是php的大小限制的话他会有报错信息,不至于500,thinkPHP的话就更不可能了,如果是thinkPHP的话他肯定是有容错处理的,提示信息肯定会更加清楚,不可能500。那么就肯定是web服务器的原因了。我部署的环境是Apache+PHP,那么已经有了方向就从Apache入手。
先查询了一下Apache日志里记录的错误:
mod_fcgid: HTTP request length 136000 (so far) exceeds MaxRequestLen (131072)意思是请求长度超出了最长长度,但以前从没见过MaxRequestLen这个参数,到httpd.conf中找了一圈、没有找到,又到php.ini找了还是没有。
于是去官方找到了,官方文档有以下内容:
Description: maximum HTTP request length
Syntax: FcgidMaxRequestLen bytes
Default: FcgidMaxRequestLen 131072
131072正好就是128K。

解决方法
在httpd.conf中添加一条
MaxRequestLen 10485760修改请求限制为10M 参数单位是字节。
这个只是解决Apache的限制,如果是PHP上的限制还需要根据实际情况来修改php.ini配置文件中的以下参数:
upload_max_filesize(上传文件的大小限制)post_max_size(post传输的大小限制)max_execution_time(页面执行最大时间)max_input_time(页面接受数据最大时间)memory_limit(页面占用的最大内存)