move_uploaded_file()无法打开流:没有这样的文件或目录

时间:2013-01-30 04:42:22

标签: php file-upload

我已经完成了你的标准检查(是那里的目录,设置了足够的权限),我很确定我已经涵盖了你的标准愚蠢的人类技巧。这是失败的代码:

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,还有什么我可以丢失?

5 个答案:

答案 0 :(得分:17)

您无需将完整目录放入该文件。尝试从您的链接中删除/public_html/flashsale/,看看是否有效。 此外,该文件不需要具有777权限,我自己将文件上传到具有755权限的文件夹。

另外,您可以在目标目录中使用getcwd();。该函数将为您提供移动文件所需的目录。 source

答案 1 :(得分:7)

问题

$dirpath = dirname(getcwd())

这是我最初用来获取my / public_html / upload文件夹的目录路径。 $ dirpath将包含

/public_html/upload

解决方案(在服务器上)

$dirpath = realpath(dirname(getcwd()))

由于我在共享托管环境中,使move_uploaded_file正常工作的正确方法是使用此作为目标: realpath(dirname(getcwd()))返回类似于:

的内容
/home/cpanelusername/public_html/upload

答案 2 :(得分: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";
        }

希望这有帮助

答案 3 :(得分:1)

对于使用XAMPP的Ubuntu 14.04,我也遇到上传问题但在使用sudo chmod -R 777 destination修复后,它运行良好。

这是我做的:

在我的Ubuntu 14.04 XAMPP中上传的临时文件夹是/ opt / lampp / temp /。如果我希望我的上传文件为/opt/lampp/temp/testupload作为目标文件夹,那么我需要下面的配置。

  1. 转到临时文件夹

    cd /opt/lampp/temp/
    
  2. 创建' testupload' / opt / lampp / temp /

    下的文件夹
    sudo mkdir testupload
    
  3. 更改权限777

    sudo chmod -R 777 /opt/lampp/temp/testupload/
    
  4. PHP代码

    move_uploaded_file($_FILES["file"]["tmp_name"], "/opt/lampp/temp/testupload/" . $_FILES["file"]["name"])
    

答案 4 :(得分:0)

Windows和ISS的解决方案:

IUSR帐户需要目标目录中的权限。不是ISS_IUSR帐户,只是IUSR帐户。