设置 PHP tmp dir - PHP 上传不起作用

2022-08-30 14:09:13

我正在使用Valums文件上传器通过带有进度条的网页进行文件上传。几乎一切正常,但我无法更改默认的tmp目录,在上传过程中存储文件。

文件应存储在目录中,而不是默认系统目录中,因为文件挂载在RAM磁盘中,其大小限制为4 MB,用户将上传大约10 MB的文件。/upload/tmp/tmp

我搜索了很多网页,但没有一个解决方案有效。我已经在中设置了临时目录:php.ini

upload_tmp_dir =/upload

我已经为dir设置了权限,apache是文件的所有者,所以这个目录绝对可以被PHP写。/upload

我已将文件上传器中的目标路径设置为 ,因为我希望文件在上传后也存储在此目录中。最终结果是小文件已成功上传,但大于4 MB的文件无法上传 - 我想到这种行为的唯一原因是文件在上传过程中存储。可以肯定的是,我已经检查了它,结果是 - 所以PHP忽略了我的php.ini指令,或者有其他方法可以设置上传过程中文件的存储位置。/upload/tmpsys_get_temp_dir()/tmp

哦,最后一个信息:没有设置,所以PHP对磁盘的访问只受文件权限的限制。open_basedir


答案 1

这里描述的问题很久以前就被我解决了,但我真的不记得上传不起作用的主要原因是什么。有多个事情需要修复,以便上传可以正常工作。我已经创建了清单,可以帮助其他有类似问题的其他人,我将对其进行编辑以使其尽可能有用。正如我之前在聊天中所说的那样,我正在研究嵌入式系统,因此在非嵌入式系统上可能会跳过一些要点。

  • 签入 php.ini.这是PHP在上传时存储临时文件的目录。upload_tmp_dir

  • 签入 php.ini.如果定义,它将 PHP 读/写权限限制为指定的路径及其子目录。确保 位于此路径内。open_basedirupload_tmp_dir

  • 签入 php.ini.如果要上传 20 MB 的文件,请尝试一些更大的文件,例如 .这定义了您在上载期间可能使用的 POST 消息的最大大小。post_max_sizepost_max_size = 21M

  • 签入 php.ini.这将指定可以上载的最大文件。upload_max_filesize

  • 签入 php.ini.这是脚本可能消耗的最大内存量。很明显,它不能低于上传大小(说实话,我不太确定它 - PHP在复制临时文件时可能会缓冲)。memory_limit

  • 确保您正在检查正确的 php.ini文件,该文件是 PHP 在 Web 服务器上使用的文件。最好的解决方案是使用此处描述的指令执行脚本 http://php.net/manual/en/function.php-ini-loaded-file.php(函数)php_ini_loaded_file

  • 检查用户php的运行身份(请参阅此处如何操作:如何检查php正在运行的用户身份? )。我曾在不同的发行版和服务器上工作过。有时是 ,但有时它可以是 。无论如何,请检查此用户是否有权在您要上传到的临时目录和目录中进行读取和写入。如果要上传到子目录,请检查路径中的所有目录(例如 -check 和 .apacheroot/dir1/dir2/dir1dir2

  • 在嵌入式平台上,您有时需要限制对根文件系统的写入,因为它存储在闪存卡上,这有助于延长此卡的使用寿命。如果使用脚本启用/禁用文件写入,请确保在上载之前启用写入。

  • 在某些平台上,我在某些平台上基于会话(如此处 http://phpmaster.com/tracking-upload-progress-with-php-and-javascript/)的PHP >5.4上传监控存在严重问题。首先尝试一些简单的东西(比如这里:http://www.dzone.com/snippets/very-simple-php-file-upload)。如果有效,您可以尝试更复杂的机制。

  • 如果您在php中进行任何更改.ini请记住重新启动服务器,以便重新加载配置。


答案 2

我在这个问题上挣扎了很长时间...我的解决方案是在包含php脚本的文件夹中修改php.ini文件。这很重要,因为在根目录下修改php.ini并不能解决问题(我在每个文件夹中都有一个php.ini用于粒度控制)。我的php.ini中的相关条目看起来像这样....(此问题可能不需要output_buffering)

output_buffering = On 
upload_max_filesize = 20M 
post_max_size = 21M

推荐