文件上传错误

时间:2011-06-20 04:12:11

标签: php mysql

这是我的剧本:

$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. ";

2 个答案:

答案 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中删除正斜杠或使用“ - ”代替。我认为即使逃避“/”也应该有效,但如果没有具体的理由可以保持简洁,我建议保持简单。

另外,我建议使用绝对路径进行文件系统操作。

希望这有帮助。