警告:move_uploaded_file()无法打开流

时间:2013-04-18 09:27:18

标签: php file-upload

我正在尝试在ftp上传文件。

这是我的代码

    $jname= "Accounts of Biotechnology Research";
    if (!is_dir('/Trade/upload/ '.$jname)) {

        mkdir('/Trade/upload/ '.$jname);   // line 63
    }
    move_uploaded_file($_FILES["submission_file"]["tmp_name"],    "/Trade/upload/$jname/" . $dup_name );    // line 67

Trade是public_html文件夹中的一个文件夹。

当我上传文件时,它会给我一个警告,例如

Warning: mkdir() [function.mkdir]: No such file or directory in /home/my_username/public_html/Trade/upload.php on line 63

Warning: move_uploaded_file(/Trade/upload/Accounts of Biotechnology Research/76164762-sm.pdf) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/my_username/public_html/Trade/upload.php on line 67

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phphZXp0O' to '/Trade/upload/Accounts of Biotechnology Research/76164762-sm.pdf' in /home/my_username/public_html/Trade/upload.php on line 67 

2 个答案:

答案 0 :(得分:7)

第一: 你在这里有一个空格mkdir('/Trade/upload/ '.$jname);。假设您应该mkdir('/Trade/upload/'.$jname);(对于is_dir来说相同)

第二: 确保您可以写入Trade/upload目录。

第三(我认为这是真正的问题):

看起来您正在尝试上传到具有完整路径的目录: /home/my_username/public_html/Trade/upload/,但您的代码将尝试使用完整路径创建目录: /Trade/upload/。 你需要改变

 if (!is_dir('/Trade/upload/ '.$jname)) {    
     mkdir('/Trade/upload/ '.$jname);   // line 63
 }

 if (!is_dir('upload/'.$jname)) {    
     mkdir('upload/'.$jname);   // line 63 (or maybe there should be Trade/upload, but suppose current working dir will be /home/my_username/public_html/Trade, so only upload/)
 }

另一种选择是强制mkdir以递归方式创建目录:

 mkdir('/Trade/upload/'.$jname, 0755, true);

但在这种情况下,文件将上传到/Trade/upload/...而不是/home/my_username/public_html/Trade/upload/...

答案 1 :(得分:4)

根据您收到的错误消息,您应该注意两件事 我猜测/Trade不是您计算机上的根路径,因为错误清楚您的实际路径为/home/my_username/public_html/Trade/,因此第一次调整应为

$root_path = "/home/my_username/public_html/Trade/upload/";    

我建议的第二个调整是避免使用带空格的路径名:

$jname= "Accounts of Biotechnology Research"; //could be changed to
$jname= "Accounts_of_Biotechnology_Research"; //$jname = str_replace(" ","-",$jname)    OR
$jname= "Accounts-of-Biotechnology-Research"; //$jname = str_replace(" ","-",$jname)    

最后注意以下几行中的空格字符,它们会影响最终结果:

if (!is_dir('/Trade/upload/ '.$jname)) {   //AND
    mkdir('/Trade/upload/ '.$jname);
}

注意两个字符串中upload/ '.$jname之间的[空格] 希望这会有所帮助。