Woo*_*e88 29 php file-upload valums-file-uploader
我正在使用Valums文件上传器通过带有进度条的网页上传文件.几乎一切正常,但我无法更改默认的tmp目录,在上传过程中存储文件.
文件应存储在/upload
目录中,而不是存储在默认系统/tmp
目录中,因为/tmp
它安装在RAM磁盘中,其大小限制为4 MB,用户将上传大约10 MB的文件.
我搜索了很多网页,但没有一个解决方案有效.我已将temp目录设置为php.ini
:
upload_tmp_dir =/upload
Run Code Online (Sandbox Code Playgroud)
我已经设置了/upload
dir的权限,而apache是该文件的所有者,因此该目录肯定是PHP可写的.
我已经在文件上传器中设置了目标路径/upload
,因为我希望文件在上传后也存储在此目录中.最终结果是成功上传了小文件,但是大于4 MB的文件无法上传 - 我想到这种行为的唯一原因是文件/tmp
在上传期间存储.可以肯定的是,我已经检查了它,sys_get_temp_dir()
结果是/tmp
-so PHP忽略了我的php.ini指令,或者还有其他一些方法来设置上传过程中存储文件的位置.
哦,最后的信息:open_basedir
没有设置,所以PHP访问磁盘只受文件权限的限制.
Woo*_*e88 65
我很久以前就解决了这里描述的问题,但我真的不记得上传不起作用的主要原因.有许多事情需要修复,以便上传可以工作.我创建了可能帮助其他人遇到类似问题的清单,我将对其进行编辑以使其尽可能有用.正如我之前在聊天时所说的,我正在研究嵌入式系统,因此在非嵌入式系统上可能会跳过一些要点.
检查upload_tmp_dir
php.ini.这是PHP在上传时存储临时文件的目录.
检查open_basedir
php.ini.如果已定义,则会限制对指定路径及其子目录的PHP读/写权限.确保它upload_tmp_dir
在此路径中.
检查post_max_size
php.ini.如果你想上传20 Mbyte文件,试试一些更大的东西,比如post_max_size = 21M
.这定义了您在上载期间可能使用的最大POST消息大小.
检查upload_max_filesize
php.ini.这指定了可以上传的最大文件.
检查memory_limit
php.ini.这是脚本可能消耗的最大内存量.很明显,它不能低于上传大小(说实话,我不太确定它 - PHP可能在复制临时文件时缓冲).
确保您正在检查您的网络服务器上PHP使用的正确php.ini文件.最好的解决方案是与本文所描述的指令执行脚本http://php.net/manual/en/function.php-ini-loaded-file.php(php_ini_loaded_file
功能)
检查用户php运行的是什么(请参阅此处如何操作:如何检查用户php运行的是什么?).我曾经在不同的发行版和服务器上工作过.有时它是apache
,但有时它可以root
.无论如何,请检查此用户是否有权在您上传的临时目录和目录中进行读写.检查路径中的所有目录,以防您上传到子目录中(例如/dir1/dir2/
-check both dir1
和dir2
.
在嵌入式平台上,您有时需要限制写入根文件系统,因为它存储在闪存卡上,这有助于延长此卡的使用寿命.如果您使用脚本启用/禁用文件写入,请确保在上载之前启用写入.
在某些平台上,我遇到了基于会话的PHP> 5.4上传监控的严重问题(如http://phpmaster.com/tracking-upload-progress-with-php-and-javascript/所述).首先尝试简单的事情(例如:http://www.dzone.com/snippets/very-simple-php-file-upload).如果它有效,您可以尝试更复杂的机制.
如果您在php.ini中进行任何更改,请记住重新启动服务器,以便重新加载配置.