用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找到我的参数被任何本文件明确地重新定义......

+1

你检查目标文件夹的权限?你有没有对MIME类型或文件扩展名进行验证? – teeyo

+1

你需要养成[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)的习惯,它可以帮助你解决你的问题。您将获得积分,其他人将被鼓励帮助您。 –

+0

我检查文件夹权限,但是如何检查我是否对MIME类型或文件扩展名进行验证? –

我终于找到了一个相对的堆栈溢出问题的解决方案: Changes to upload_max_filesize in Ubunutu php.ini will not take effect

那么,是什么,我的工作是跟随的建议Jekis:

Folow these steps to resolve the issue:

  1. 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
  2. Create your user.ini file inside the dir. (/etc/php5/apache2/conf.d/user.ini)
  3. Use this ini file for custom settings.
  4. 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.