-1

//上传表单.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>

//上传文件.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/如果目录不存在,程序不会创建目录吗?

4

3 回答 3

2

在您的最终说明中,您使用$_FILES['name']['tmp_name']的是$_FILES['file']['tmp_name'].

顺便说一句,您的脚本中有一些错误:

  1. 即使有人上传了无效文件,您也会向他们显示错误消息,但您仍会将其移至最终位置。
  2. $_FILES["file"]["type"]是浏览器(即:客户端)发送的值。恶意攻击者可能会向您发送任何类型的文件并将其伪装成image/png,而您信任它。你不能相信这个值。相反,您可以使用getimagesize,它返回一个数组,该数组具有图像的 mime 类型(并由服务器检测(即:由您)。要检测非图像的 mime 类型,您可以FileInfo具体使用finfo_file

uploads此外,如果您的文件夹不存在,php 脚本将不会创建它,而是会显示错误(并且什么也不做)。您必须首先创建此文件夹,并确保运行您的 php 脚本的用户(通常与运行您的 http 服务器相同)对该目录具有写入权限。

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

如果该文件未被移走或重命名,则该文件将在请求结束时从临时目录中删除。

于 2013-07-25T07:50:58.473 回答
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"];
  }
于 2013-07-25T07:57:25.147 回答
0

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

于 2013-07-25T07:50:27.813 回答