无法在非 PHP 驱动器上将upload_tmp_dir设置为目录


Can't set upload_tmp_dir to a dir on non-PHP drive?

PHP专家,我已经研究这个问题大约一天半了,我不知所措。如果我是对的,我发现了PHP中可以说是一个巨大的疏忽。我不敢相信不会给其他人带来问题,虽然我发现其他人通过谷歌也有同样的问题,但他们都接受了失败。其中一个甚至向PHP提交了一个错误,由于缺乏活动,它最终被关闭。

我在WAMP堆栈中运行PHP 5.3 w/Apache。

我正在执行简单的文件上传(然后从 tmp 位置移动),出于安全和速度原因,我希望初始上传临时目录 (upload_tmp_dir) 位于不同的磁盘上,文件将在移动后结束,这恰好是网络共享。Z:''temp.通常,它与PHP位于同一磁盘上,但这意味着我必须上传一个潜在的大文件,然后等待它复制到另一个磁盘。而不是仅仅将其作为临时磁盘上传到另一个磁盘,然后执行快速移动。

例:

//upload_tmp_dir = Z:'Temp (set in php.ini)
$targetpath = Z:'Data'pdfs (final destination)
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $targetpath);

从理论上讲,这应该将文件暂时上传到 Z:''Temp,然后在没有错误的情况下完成,将其移动到其最终目的地 Z:''Data''pdfs''filename.pdf。

我已经确认只要upload_tmp_dir在同一个驱动器上,文件上传和移动就可以工作 PHP..,即 C:''MyTemp,但如果我遍历到不同的驱动器(如 Z:''Temp),则无法正常工作。我在 php.ini 中为 upload_tmp_dir 指定的值被简单地忽略,如果我尝试遍历到不同的驱动器/分区,该文件将存储在 C:''Windows''Temp 中。似乎没有区别,它是一个映射的驱动器。权限都设置正确,共享和安全性都允许所有人(相当于 chmod 777

)。

我在多个地方读到"PHP",特别是move_uploaded_file()"在遍历驱动器时遇到问题"。这显然是出于安全原因,但似乎不能在任何地方覆盖它。但是,随着越来越多的服务器使用虚拟化和空间有限的SSD,我不明白这是怎么做到的。如果一个人运行一个站点,一次有数百名用户上传文件,那么临时文件(可能很大)必须驻留在 C:'' 上有什么意义PHP在哪里??你们中有人以前处理过这个问题或有任何提示吗?

我一直认为这是一个权限问题,所以我研究了其他可能限制访问的 PHP 和 Apache 设置,但即使设置open_base_dir中的所有路径似乎也没有任何帮助。

我发现的一些帖子概述了相同或类似的问题:

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/PHP_Databases/Q_21190386.html

https://serverfault.com/questions/128017/php-ignores-upload-tmp-dir

https://bugs.php.net/bug.php?id=44420

这家伙说:

映射的驱动器是特定于用户的,Web服务器,因此PHP,在不同的用户名下运行

http://forums.phpfreaks.com/index.php?topic=175349.0