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中。似乎没有区别它是一个映射驱动器。权限都设置正确,共享和安全性都允许Everyone(chmod 777等效)。
我在多个位置读过“PHP”,特别是move_uploaded_file()“在遍历驱动器时遇到问题”。这显然是出于我假设的安全原因,但它似乎不能在任何地方被覆盖。但是,随着越来越多的服务器使用虚拟化和SSD的空间有限,我不明白这是如何实现的。如果一个人运行的网站上有几百个用户一次上传文件,那么临时文件(可能很大)必须驻留在C:\上才有意义,其中PHP是??你们之前有没有处理过这个问题或有任何提示?
我一直认为这是一个权限问题,因此我研究了其他可能限制访问的PHP和Apache设置,但即使在open_base_dir中设置所有路径也不会有任何帮助。
我发现一些帖子概述了相同或类似的问题:
https://serverfault.com/questions/128017/php-ignores-upload-tmp-dir
答案 0 :(得分:2)