php文件没有上传到临时目录

时间:2013-07-25 07:44:28

标签: php uploading

// uploadForm.html

<html>
    <body>
        <form action="upload_file.php" method="post" enctype="multipart/form-data">
            <label for="browseFile">Filename : </label>
            <input type="file" name="file" id="browseFile"><br> 
            <input type="submit" name="submit" value="Submit">
    </body>
</html>

// upload_file.php

<?php
  $allowedExt = array("png","jpg");
    $temp = explode(".",$_FILES["file"]["name"]);
    $extension = end($temp);
    echo "uploading...";
    if((($_FILES["file"]["type"]=="image/png") || ($_FILES["file"]["type"]=="image/jpg")) && ($_FILES["file"]["size"] < 1000000))
    {
        echo "success";
        if($_FILES["file"]["error"] > 0)
        {
            echo "error in uploading" . $_FILES["file"]["error"]."<br>";
        }
        else
        {
            echo "<p>uploaded successfully</p>";
        }
    }
    else
        echo "invalid file" ;

    echo $_FILES["file"]["name"]."stored in ".$_FILES["file"]["tmp_name"]."<br>";
    move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/".$_FILES["file"]["name"]);
    echo "moved Successfully";

?>

当我尝试回显临时目录名称时,它是空白的。上传的文件丢失了。 我不会在MAMP/htdocs目录中的/tmp/文件夹中找到它。

我在uploads中没有/MAMP/htdocs/目录。如果该程序不存在,程序是否会创建一个目录?

3 个答案:

答案 0 :(得分:2)

在最终说明中,您有$_FILES['name']['tmp_name']而不是$_FILES['file']['tmp_name']

顺便说一下,你的脚本中有一些错误:

  1. 即使有人上传了无效文件,您也会向他们显示错误消息,但您仍然会将其移至最终位置。
  2. $_FILES["file"]["type"]是浏览器发送的值(即:客户端)。恶意攻击者可能会向您发送任何类型的文件并将其伪装成image/png,并且您信任它。你不能相信这个价值。相反,你可以使用getimagesize,它返回一个具有图像的mime类型的数组(并由服务器检测(即:由你)。要检测mime类型的非图像,你可以使用FileInfo,具体来说是finfo_file
  3. 此外,如果php脚本不存在,则不会创建uploads文件夹,而是显示错误(并且不执行任何操作)。您必须首先创建此文件夹,并确保运行您的php脚本的用户(通常与运行您的http服务器相同)具有该目录的写权限。

    编辑:您在临时目录中看不到任何上传的文件,因为(引用http://www.php.net/manual/en/features.file-upload.post-method.php):

      

    该文件将从临时目录中删除   请求是否尚未移走或重命名。

答案 1 :(得分:0)

$_FILES["name"]["tmp_name"]不存在,应为$_FILES["file"]["tmp_name"]

答案 2 :(得分:0)

$allowedExt = array("png","jpg");
echo $temp = explode(".",$_FILES["file"]["name"]);
$extension = end($temp);
echo "uploading...";

if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br>";
  }
else
  {

    move_uploaded_file($_FILES["file"]["tmp_name"],
    "upload/" . $_FILES["file"]["name"]);
    echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
  }