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给出“无法打开流:权限被拒绝”错误

无法打开流:是一个目录

Ubuntu Server不会使用PHP“move_uploaded_file”上传文件

move_uploaded_file() 无法将文件从 tmp 移动到 dir