php - 无法将 upload_tmp_dir 设置为非 PHP 驱动器上的目录?

标签 php file-upload wamp

各位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 中设置所有路径似乎也无济于事。

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

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

最佳答案

这些人说:

映射的驱动器是用户特定的,网络服务器,因此是 php,在不同的用户名下运行

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

关于php - 无法将 upload_tmp_dir 设置为非 PHP 驱动器上的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139967/

相关文章:

PHP 未定义偏移量

php - CodeIgniter 图像上传和调整大小失败

javascript - 如何从 Javascript readEntries() 检索文件内容

php - 未找到 PostsController::index() - CakePHP

mysql - 使用wamp的mysql地址

php - 尝试使用 SQL 值通过电子邮件发送在 PHP 中创建的表

php - codeigniter 事件记录和 mysql

javascript - Google Charts 不适用于桌面浏览器,但适用于移动浏览器

php - 优化和缩短联合查询

php - var_dump($_FILES) result in blank ["type"] 对于特定的图像文件