用php上传大文件nginx
问题描述:
我想通过php api(大约4M)上传相对较大的文件。 在我的PHP5脚本的开头我设置以下选项:用php上传大文件nginx
ini_set("upload_max_filesize","100M");
ini_set("post_max_size","108M");
ini_set("max_execution_time","3000");
ini_set("memory_limit","500M");
ini_set("max_input_time","3000");
ini_set("output_buffering","0");
再加上我添加以下PARAMS nginx的配置文件:
client_max_body_size 500M;
fastcgi_read_timeout 600s;
keepalive_timeout 3000;
client_header_timeout 1000m;
client_body_timeout 1000m;
client_header_buffer_size 2k;
当我有这个本已略有好转的情况下错误:
POST Content-Length of 78014353 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
而现在,有些后来出现我的错误的过程中(当我尝试移动的未上传文件,修身框架功能的moveTo)
error exception 'RuntimeException' with message ' is not a valid uploaded file'
你对我可以尝试解决的问题有一些建议吗?
编辑:
我忘了精确的上载,只要运作良好的归档文件上传小(< 2M)
编辑2:
我尝试修改文件/etc/php5/fpm/php.ini而不是直接在我的php脚本上修改参数,但是我得到以下问题。
重启PHP5-FPM和nginx的,我的新PARAMATERS都没有考虑到:
>>php5-fpm -i | grep "post_max"
post_max_size => 8M => 8M
不过看来我修改好的配置文件:
>>php5-fpm -i | grep "php.ini"
Configuration File (php.ini) Path => /etc/php5/fpm
Loaded Configuration File => /etc/php5/fpm/php.ini
我尝试检查如果一些其他ini文件覆盖我的更改加载:
[email protected]:~# php5-fpm -i | grep ".ini"
Configuration File (php.ini) Path => /etc/php5/fpm
Loaded Configuration File => /etc/php5/fpm/php.ini
Scan this dir for additional .ini files => /etc/php5/fpm/conf.d
Additional .ini files parsed => /etc/php5/fpm/conf.d/05-opcache.ini,
/etc/php5/fpm/conf.d/10-mysqlnd.ini,
/etc/php5/fpm/conf.d/10-pdo.ini,
/etc/php5/fpm/conf.d/20-curl.ini,
/etc/php5/fpm/conf.d/20-gd.ini,
/etc/php5/fpm/conf.d/20-json.ini,
/etc/php5/fpm/conf.d/20-mcrypt.ini,
/etc/php5/fpm/conf.d/20-mosquitto.ini,
/etc/php5/fpm/conf.d/20-mysql.ini,
/etc/php5/fpm/conf.d/20-mysqli.ini,
/etc/php5/fpm/conf.d/20-pdo_mysql.ini,
/etc/php5/fpm/conf.d/20-readline.ini
user_ini.cache_ttl => 300 => 300
user_ini.filename => .user.ini => .user.ini
Supported handlers => cdb cdb_make db4 inifile flatfile qdbm
com_init_db => 0
Classes => AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException
但我做了n OT找到我的参数被任何本文件明确地重新定义......
答
我终于找到了一个相对的堆栈溢出问题的解决方案: Changes to upload_max_filesize in Ubunutu php.ini will not take effect
那么,是什么,我的工作是跟随的建议Jekis:
Folow these steps to resolve the issue:
- Eval phpinfo(); Search for 'Scan this dir for additional .ini files' text in phpinfo() output It will be something like this /etc/php5/apache2/conf.d
- Create your user.ini file inside the dir. (/etc/php5/apache2/conf.d/user.ini)
- Use this ini file for custom settings.
- Restart the server
这是因为:
The newest php version installed on server does not allow global settings (such as execution time, max upload filesize, max post file size, etc.) to be changed.
你检查目标文件夹的权限?你有没有对MIME类型或文件扩展名进行验证? – teeyo
你需要养成[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)的习惯,它可以帮助你解决你的问题。您将获得积分,其他人将被鼓励帮助您。 –
我检查文件夹权限,但是如何检查我是否对MIME类型或文件扩展名进行验证? –