用php nginx上传大文件

时间:2017-10-05 14:53:36

标签: php nginx file-upload

我想通过php api(大约4M)上传相对较大的文件。 在我的php5脚本的开头,我设置了以下选项:

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");

加上我将以下参数添加到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

现在,我的错误发生在该过程稍后(当我尝试使用Slim框架的函数moveTo移动未上传的文件时)

error exception 'RuntimeException' with message '  is not a valid uploaded file'

您对我可以尝试解决的问题有什么建议吗?

编辑:

只要要上传的存档文件很小(<2M)

,我就忘记确保上传效果很好

编辑2:

我尝试修改文件/etc/php5/fpm/php.ini,而不是直接在我的php脚本上修改参数,但是我遇到了以下问题。

重新启动php5-fpm和nginx后,我的新参数不会被考虑在内:

>>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文件:

root@test2:~# 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

但我没有发现我的参数在任何这些文件中被明确重新定义......

1 个答案:

答案 0 :(得分:1)

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

所以,对我有用的是遵循Jekis的建议:

  

请执行以下步骤解决问题:

     
      
  1. Eval phpinfo();   搜索&#39;扫描此目录以获取其他.ini文件&#39; phpinfo()输出中的文本   它将是这样的/etc/php5/apache2/conf.d
  2.   
  3. 在dir中创建user.ini文件。 (/etc/php5/apache2/conf.d/user.ini)
  4.   
  5. 使用此ini文件进行自定义设置。
  6.   
  7. 重新启动服务器
  8.   

这是因为:

  

服务器上安装的最新php版本不允许全局   设置(例如执行时间,最大上传文件大小,最大帖子文件   尺寸等)要改变。

相关问题