我正在尝试在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
答案 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
之间的[空格]
希望这会有所帮助。