这是我的剧本:
$today = mktime(0, 0, 0, date("m"), date("d"), date("y"));
$b= date("m/d/y", $today);
if ($_FILES["file$i"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file$i"]["error"] . "<br />";
}
else
{
// echo "Upload: " . $_FILES["file"]["name"] . "<br />";
// echo "Type: " . $_FILES["file"]["type"] . "<br />";
// echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
// echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
$upload=$_FILES["file$i"]["name"];
$fileName = preg_replace('/[^\w\._]+/', '', $upload);
$filup=$b.$fileName;
echo $filup;
if (file_exists("upload/" . $filup))
{
echo $_FILES["file$i"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file$i"]["tmp_name"],
"upload/" . $filup);
$path="upload/" . $filup;
$temp="Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
$sql="insert into album(uid,path,cid,title) values('$uid','$path','$cid','$text[$i]') ";
mysql_query($sql) or die(mysql_error());
}
}
它向我显示了这个错误:
警告:move_uploaded_file(upload / 06/20 / 113.jpg)[function.move-uploaded-file]:无法打开流:C:\ wamp \ www \ demo \ editedfileupload \ pr1中没有这样的文件或目录第31行上传\ upload_file.php
第31行是:
echo $_FILES["file$i"]["name"] . " already exists. ";
答案 0 :(得分:1)
我不知道为什么你认为第31行是你选择的那个,但错误肯定是由这段代码引起的:
move_uploaded_file($_FILES["file$i"]["tmp_name"], "upload/" . $filup);
现在,通常情况下,我会说这是一个CHMOD问题,但是有一些奇怪的事情发生了,我不太熟悉(因为你是在Windows系统上工作)。检查CHMOD,如果修复它,对你有好处,但除此之外,请解释变量$b
包含正斜杠的可能性如何? Windows使用反斜杠(这也可能在PHP中也适用)。看看更改斜线是否会产生影响。
编辑:根据您对自己帖子的评论,我很确定这个问题是由正斜杠引起的。您仍然可以使用$fileName
变量,但请确保$b
变量不包含正斜杠。此外,在行if (file_exists("upload/" . $filup))
和move_uploaded_file($_FILES["file$i"]["tmp_name"], "upload/" . $filup);
中,将正斜杠更改为反斜杠。
答案 1 :(得分:1)
我认为您的问题是$filup
不是您认为的那样。当您执行$filup=$b.$fileName;
时,您可能无意中更改了文件的完整路径。例如,假设:
$b = "06/20/11"
$fileName = "testfile"
然后在执行$filup=$b.$fileName;
后,$ filup将成为:
$filup = "06/20/11testfile"
因此,当你在file_exists()或move_uploaded_file()中使用$ filup时,可能会发生的是$ fileup中的斜杠是针对目录分隔符而不是文件名。
因此检查(file_exists('upload / 06/20 / 11testfile')总是失败,当它转到move_uploaded_file时,它会显示“没有这样的文件或目录”。
请考虑从$ b中删除正斜杠或使用“ - ”代替。我认为即使逃避“/”也应该有效,但如果没有具体的理由可以保持简洁,我建议保持简单。
另外,我建议使用绝对路径进行文件系统操作。
希望这有帮助。