move_uploaded_file() 无法打开流:没有这样的文件或目录
Posted
技术标签:
【中文标题】move_uploaded_file() 无法打开流:没有这样的文件或目录【英文标题】:move_uploaded_file() failed to open stream: no such file or directory 【发布时间】:2013-01-13 20:17:31 【问题描述】:我已经完成了您的标准检查(那里的目录是否足够宽松,权限设置是否足够宽松),并且我很确定我已经涵盖了您的标准愚蠢的人类技巧。这是失败的代码:
move_uploaded_file($_FILES['image1']['tmp_name'], "/public_html/flashsale/assets/img/products/T".$_FILES['image1']['name']);
目录在那里 - 我从 FileZilla 复制了路径。我什至在 FileZilla 和 HostGator 控制面板的文件管理器中都将权限设置为 777。此代码生成两个警告:
消息: move_uploaded_file(/public_html/flashsale/assets/img/products/Tsirloin.jpg) [function.move-uploaded-file]:打开流失败:没有这样的文件或 目录
消息:move_uploaded_file() [function.move-uploaded-file]:无法 将“/tmp/phpI5GZ3S”移动到 '/public_html/flashsale/assets/img/products/Tsirloin.jpg'
按这个顺序。那么,文件正在上传,目录存在并设置为 777,我还能缺少什么?
【问题讨论】:
不要总是使用绝对路径。或者确保从根文件夹到图像文件夹的路径正确。 Failed to open stream : No such file or directory的可能重复 PHP: move_uploaded_file() failed to open stream: No such file or directory的可能重复 【参考方案1】:您不需要将完整目录放入文件中。尝试从您的链接中删除/public_html/flashsale/
,看看是否可行。
另外,文件不需要777权限,我自己上传文件到755权限的文件夹。
另外,您可以在您的目标目录中使用getcwd();
。该功能将为您提供移动文件所需的目录。 source
【讨论】:
原来我没有使用路径的 /home/user/ 部分 - 添加 getcwd() 修复它。【参考方案2】:确保您正在穿越的路径。 public_html 不是必需的
$image=basename($_FILES['file']['name']);
$image=str_replace(' ','|',$image);
$tmppath="images/".$image;
if(move_uploaded_file($_FILES['file']['tmp_name'],$tmppath))
echo "success";
else
echo "fail";
希望对你有帮助
【讨论】:
我为这个解决方案搜索了几个小时,不知道为什么在我尝试推送文件名时 $_FILES['file']['name'] 一直为空。谢谢楼主!!【参考方案3】:问题
$dirpath = dirname(getcwd())
这是我最初用来获取 /public_html/upload 文件夹的目录路径。 $dirpath 将包含
/public_html/upload
解决方案(在服务器上)
$dirpath = realpath(dirname(getcwd()))
由于我在共享主机环境中,让 move_uploaded_file 工作的正确方法是使用它作为目标: realpath(dirname(getcwd())) 返回类似:
/home/cpanelusername/public_html/upload
【讨论】:
谢谢这救了我 :) (y) 幸运编程 Ajmal...(Y) 你解释的很好,但是你没有放示例代码,我应该把$dirpath变量放在哪里? 你什么时候想上传文件到你的服务器..那么你需要一个文件上传路径(服务器中的文件夹路径)。所以如果你不能正确得到它那么你应该是你的页面上的错误..所以我在这里提到了获取真实文件夹路径的方法..我通过这种方法得到了解决方案..你也可以试试这个朋友.. :) @samouray【参考方案4】:对于带有 XAMPP 的 Ubuntu 14.04,我也有上传问题,但在我用 sudo chmod -R 777 destination
修复后,它运行良好。
这是我所做的:
在我的 Ubuntu 14.04 XAMPP 中上传的临时文件夹是 /opt/lampp/temp/。如果我想上传文件到/opt/lampp/temp/testupload
作为目标文件夹,那么我需要下面的配置。
转到临时文件夹
cd /opt/lampp/temp/
在 /opt/lampp/temp/ 下创建“testupload”文件夹
sudo mkdir testupload
更改权限 777
sudo chmod -R 777 /opt/lampp/temp/testupload/
PHP 代码
move_uploaded_file($_FILES["file"]["tmp_name"], "/opt/lampp/temp/testupload/" . $_FILES["file"]["name"])
【讨论】:
【参考方案5】:Windows 和 ISS 解决方案:
IUSR 帐户需要目标目录中的权限。不是 ISS_IUSR 帐户,只是 IUSR 帐户。
【讨论】:
以上是关于move_uploaded_file() 无法打开流:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
PHP/IIS copy()/move_uploaded_file() 无法打开流:权限被拒绝警告
move_uploaded_file 无法打开流和权限被拒绝错误
在我完成所有配置后,move_uploaded_file给出“无法打开流:权限被拒绝”错误