PHP文件上载脚本未写入临时目录

时间:2013-04-19 20:45:48

标签: php

好吧,我的图片上传脚本/应用程序出了问题。我一次又一次地尝试调试,但仍然无法找出问题所在。代码似乎很好,但由于某种原因,文件看起来不会保存在临时目录中,以便它可以移动到我服务器上的上传目录。我已经确定我正在尝试上传它的目录(上传),包括临时目录,具有读/写/执行权限集,并且上传在php.ini文件夹中设置为on。我有一种感觉,文件永远不会保存到临时文件夹,但我不知道如何检查是否是这种情况,因为我知道文件在脚本完成执行后被删除。我希望你们能帮助我,因为我不知道该怎么做。我的脚本有代码。

此外,这是我的问题所在。

if (is_uploaded_file($filetempname)) {
          $final = "../public_html/uploads/" . $filename;              
          $result = move_uploaded_file($filetempname, $final);
          if($result)
          {
            echo 'success';
            echo "<br>Stored in: " . "public_html/uploads/" . $filename;
          }
          else
          {
            echo 'Image was not uploaded.';
          }

$ result = move_uploaded_file($ filetempname,$ final)保持返回false,没有出现错误的迹象。我知道如果文件类型不正确,它将返回false并且不会复制任何内容,如果由于某种原因无法移动文件,它将返回false,并且它将引发一条警告消息。但是,我根本没有提出任何消息。我所知道的是它返回false并且它没有做它应该做的事情。

<?php
error_reporting(E_ALL);
print_r($_FILES);
$filetype = $_FILES["file"]["type"];
$filename = $_FILES["file"]["name"];
$filetempname = $_FILES["file"]["tmp_name"];
$filesize = $_FILES["file"]["size"];
$error = $_FILES["file"]["error"];

$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $filename));
if ((($filetype == "image/gif")
|| ($filetype == "image/jpeg")
|| ($filetype == "image/jpg")
|| ($filetype == "image/pjepg")
|| ($filetype == "image/x-png")
|| ($filetype == "image/png"))
&& ($filesize < 1000000)
&& in_array($extension, $allowedExts)) {
    if ( $error > 0) {
        echo "Error: " . $error . "<br>";
    }
    else {
        echo "Upload: " . $filename . "<br>";
        echo "Type: " . $filetype . "<br>";
        echo "Size: " . ($filesize / 1024) . " KB<br>";
        echo "Stored in: " . $filetempname . "<br>";

        if (file_exists("../public_html/uploads/" . $filename)) {
            echo $filename . " already exists. ";
        }        
        else {
            if (is_uploaded_file($filetempname)) {
              $final = "../public_html/uploads/" . $filename;              
              $result = move_uploaded_file($filetempname, $final);
              if($result)
              {
                echo 'success';
                echo "<br>Stored in: " . "public_html/uploads/" . $filename;
              }
              else
              {
                echo 'Image was not uploaded.';
              }
            }
        }
    }
}
else {
    echo "Invalid file";
}
?>

以下是表单的代码。

<form enctype="multipart/form-data" method="post" action="scripts/snap.php">
        <!--<p>
            <input id="plat" class="plat" name="plat" type="hidden" value="" />
            <input id="plon" class="plon" name="plon" type="hidden" value=""  />
        </p>-->
        <div class="row">
            <label for="file">Select an image to Upload</label><br />
            <input type="file" name="file" id="file" /><!--onchange="fileSelected();"--> 
        </div>
        <div id="filename"></div>
        <div id="fileSize"></div>    
        <div id="fileType"></div>
        <div class="row">
            <input type="submit" name="submit" value="Submit" />
            <!--<input type="button" onclick="uploadFile()" value="Upload" />-->
        </div>
        <div id="progressNumber"></div>
    </form>

2 个答案:

答案 0 :(得分:1)

忘记所有文件类型检查以及其他任何内容。编写一个只有一个责任的单独脚本:将上传的文件移动到您要永久存储它的位置。专注于那个一个小部分并让它发挥作用。

一旦你有文件移动代码工作,将它包装在一个函数中,然后,只有当该部分工作时,将文件移动代码集成到你拥有的其余代码中。

这里的总体教训是,当您遇到问题时,最好以模块化的方式编写代码,以便真正快速,轻松地确定问题的确切位置。

另外,考虑使用一个框架或库来处理这个文件,为你上传工作,因为你在这里重新发明轮子。

答案 1 :(得分:0)

首先,检查您是否正确提交。你在表单上包含了enctype吗?

<form method='POST' enctype='multipart/form-data' action='upload.php'>

接下来,您的代码print_r($_FILES);是否返回任何值或是否为null?

如果是,请尝试检查上传文件夹中您知道的任何现有文件并使用is_file(),因为您可能指定的路径不正确。

编辑:表单中没有问题