Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';是否将upload\u tmp\u目录设置为非PHP驱动器上的目录?_Php_File Upload_Wamp - Fatal编程技术网

Can';是否将upload\u tmp\u目录设置为非PHP驱动器上的目录?

Can';是否将upload\u tmp\u目录设置为非PHP驱动器上的目录?,php,file-upload,wamp,Php,File Upload,Wamp,PHP专家们,我研究这个问题已经有一天半的时间了,现在我不知所措。如果我是对的,我发现了PHP中一个可以说是巨大的疏忽。。一个我不敢相信的问题不会给其他人带来麻烦,虽然我通过谷歌发现其他人也有同样的问题,但他们都接受了失败。其中一个甚至向PHP提交了一个bug,最终由于缺乏活动而关闭 我正在WAMP堆栈中运行PHP5.3 w/Apache 我正在做一个简单的文件上传(然后从tmp位置移动),出于安全和速度的原因,我希望初始上传临时目录(upload_tmp_dir)位于不同的磁盘上,文件在移动后

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

我正在WAMP堆栈中运行PHP5.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位于同一驱动器上,文件上传和移动就可以工作。。i、 e.C:\MyTemp,但如果我遍历到另一个驱动器,如Z:\Temp,则将无法工作。我在php.ini中为upload\u tmp\u dir指定的值将被忽略,如果我尝试遍历到其他驱动器/分区,文件将存储在C:\Windows\Temp中。这是一个映射驱动器,似乎没有什么区别。权限都设置正确,共享和安全都允许所有人(等同于chmod 777)

我在多个地方读到过“PHP”,特别是move_uploaded_file()“在遍历驱动器方面有问题”。我认为这显然是出于安全原因,但它似乎不能在任何地方被覆盖。然而,随着越来越多的服务器使用虚拟化和空间有限的SSD,我不明白这是怎么可能的。如果一个站点运行时有几百个用户同时上传文件,那么临时文件(可能很大)必须驻留在C:\PHP所在的位置有什么意义??你们中有人以前处理过这个问题吗,或者有什么建议吗

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

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

这家伙说:

映射驱动器是特定于用户的,Web服务器和相应的php在不同的用户名下运行


没有立即的答案,但是,如果您创建了一个符号链接怎么办?可能是一种解决方法。您是否确认PHP/Apache看到的Z:drive是您自己的帐户映射的Z:drive,并且PHP/Apache用户ID具有写入该共享的适当权限?如果是网络共享,请使用完整的UNC路径,而不是驱动器号,因为驱动器号是映射驱动器的每个用户的,而不是每个系统的。另外,别忘了游戏中有两层权限——共享本身和底层共享驱动器。Marc,我已经检查过了,但是你和somedev可能会发现一些问题。web服务(以及PHP)完全可能在不同的后台会话中运行,即使我使用用户名启动服务,也不会映射驱动器。我现在正试图让PHP看到UNC路径,我们来看看会发生什么:)你可能发现了什么。web服务(以及PHP)完全可能在不同的后台会话中运行,这意味着即使我使用用户名启动服务,该服务也无法访问驱动器,因为它没有映射到该后台用户会话中。我现在正试图让PHP看到UNC路径,我们来看看会发生什么:)哇。。UNC路径工作得很好。这就是问题所在。。用户映射的任何内容都不可用于服务,因为它们在不同的会话中运行。现在看来很明显。既然你至少把我引向了正确的方向,我就给你一个重点:)谢谢!!