各位PHP高手,这个问题搞了大概一天半了,手足无措。如果我是对的,我发现了 PHP 中一个可以说是巨大的疏忽。我不敢相信不会给其他人带来问题,虽然我发现其他人通过谷歌遇到了同样的问题,但他们都有接受了失败。有人甚至提出了 PHP 的错误,最终由于缺乏事件而关闭。
我在 WAMP 堆栈中运行带有 Apache 的 PHP 5.3。
我正在做一个简单的文件上传(然后从 tmp 位置移动),出于安全和速度的原因,我希望初始上传临时目录 (upload_tmp_dir) 位于文件所在的不同磁盘上将在移动后结束,这恰好是网络共享。 Z:\温度。通常,它与 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,我不明白这是怎么可能的。如果一个人正在运行一个有数百个用户同时上传文件的站点,那么临时文件(可能很大)必须驻留在 PHP 所在的 C:\上有什么意义?你们中有人以前处理过这个问题或有任何提示吗?
我一直假设这是一个权限问题,所以我研究了其他可能限制访问的 PHP 和 Apache 设置,但即使在 open_base_dir 中设置所有路径似乎也无济于事。
我发现的一些帖子概述了相同或相似的问题:
https://serverfault.com/questions/128017/php-ignores-upload-tmp-dir
最佳答案
关于php - 无法将 upload_tmp_dir 设置为非 PHP 驱动器上的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139967/