我正在使用Valums文件上传器通过带有进度栏的网页进行文件上传。几乎所有内容都可以正常运行,但是我无法更改默认的tmp目录,该目录 在 上传 期间 存储文件。
文件应存储在/upload目录中,而不要存储在默认系统/tmp目录中,因为/tmp它安装在大小限制为4 MB的RAM磁盘中,并且用户将上传大约10 MB的文件。
/upload
/tmp
我搜索了很多网页,但是没有一种解决方案有效。我在中设置了临时目录php.ini:
php.ini
upload_tmp_dir =/upload
我已经为/upload目录设置了权限,并且apache是文件的所有者,因此该目录绝对可以被PHP写入。
我已将文件上传器中的目标路径设置为/upload,因为我希望文件在上传后也存储在此目录中。最终结果是小文件成功上载,但是大于4 MB的文件无法上载- 我想到的此行为的唯一原因是文件/tmp在上载期间存储在其中。可以肯定的是,我已经使用进行了检查,sys_get_temp_dir()结果是/tmp-so PHP忽略了我的php.ini指令,或者还有其他方法可以设置在上传过程中文件的存储位置。
sys_get_temp_dir()
哦,还有最后一个信息:open_basedir尚未设置,因此PHP对磁盘的访问仅受文件权限的限制。
open_basedir
我很久以前就解决了这里描述的问题,但我真的不记得上载不起作用的主要原因是什么。有很多事情需要修复,以便上传可以正常工作。我创建了清单,可以帮助其他有类似问题的人,并且我将对其进行编辑以使其尽可能地有用。就像我之前在聊天中说的那样,我当时在嵌入式系统上工作,因此在非嵌入式系统上可能会跳过一些要点。
检upload_tmp_dir入php.ini。这是PHP在上传时存储临时文件的目录。
upload_tmp_dir
检open_basedir入php.ini。如果定义,它将PHP读/写权限限制为指定的路径及其子目录。确保upload_tmp_dir该路径在此路径内。
检post_max_size入php.ini。如果您要上传20 MB的文件,请尝试更大的操作,例如post_max_size = 21M。这定义了上载期间可能使用的POST消息的最大大小。
post_max_size
post_max_size = 21M
检upload_max_filesize入php.ini。这指定了可以上传的最大文件。
upload_max_filesize
检memory_limit入php.ini。那是脚本可能消耗的最大内存量。很明显,它不能小于上传大小(说实话,我不太确定,PHP在复制临时文件时可能正在缓冲)。
memory_limit
确保您正在检查正确的php.ini文件,该文件是Web服务器上的PHP使用的文件。最好的解决办法是执行这里描述的指令脚本http://php.net/manual/en/function.php-ini-loaded-file.php(php_ini_loaded_file功能)
php_ini_loaded_file
检查用户php的运行方式(请参见此处的操作方法:如何检查用户php的运行方式?)。我曾在不同的发行版和服务器上工作。有时是这样apache,但有时可能是root。无论如何,请检查该用户是否具有在临时目录和要上载到的目录中进行读写的权限。如果要上载到子目录,请检查路径中的所有目录(例如,/dir1/dir2/-check dir1和和都选中dir2。
apache
root
/dir1/dir2/
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中进行了任何更改,请记住重新启动服务器,以便重新加载配置。