3

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

4

1 回答 1

2

这家伙说:

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

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

于 2012-06-21T14:19:50.950 回答