【问题标题】:simple file upload script [duplicate]简单的文件上传脚本[重复]
【发布时间】:2012-02-09 08:15:37
【问题描述】:

我写了一个简单的文件上传脚本,但它给了我未定义索引文件1的错误。

<html>
    <body>
        <form method="post">
            <label for="file">Filename:</label>
            <input type="file" name="file1" id="file1" /> 
            <br />
            <input type="submit" name="submit" value="Submit" />
        </form>
    </body>
</html>
<?php
if(isset($_POST['submit'])) {
    if ($_FILES["file1"]["error"] > 0) {
        echo "Error: " . $_FILES["file1"]["error"] . "<br />";
    } else {
        echo "Upload: " . $_FILES["file1"]["name"] . "<br />";
        echo "Type: " . $_FILES["file1"]["type"] . "<br />";
        echo "Size: " . ($_FILES["file1"]["size"] / 1024) . " Kb<br />";
        echo "Stored in: " . $_FILES["file1"]["tmp_name"];
    }
}
?>

代码有什么问题?

【问题讨论】:

  • 尝试添加enctype="multipart/form-data"形成标签

标签: php file-upload


【解决方案1】:

您的&lt;form&gt; 元素中缺少enctype="multipart/form-data"

【讨论】:

    【解决方案2】:

    简单的 php 文件上传脚本的另一个解决方案在这里:
    (创建yourfile.php 并插入以下代码。然后将 yourfile.php 放在您的网站上)

    <?php
    $pass = "YOUR_PASSWORD";
    session_start();
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1256" /></head><body>
    <?php
    if (!empty($_GET['action']) &&  $_GET['action'] == "logout") {session_destroy();unset ($_SESSION['pass']);}
    
    $path_name = pathinfo($_SERVER['PHP_SELF']);
    $this_script = $path_name['basename'];
    if (empty($_SESSION['pass'])) {$_SESSION['pass']='';}
    if (empty($_POST['pass'])) {$_POST['pass']='';}
    if ( $_SESSION['pass']!== $pass) 
    {
        if ($_POST['pass'] == $pass) {$_SESSION['pass'] = $pass; }
        else 
        {
            echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post"><input name="pass" type="password"><input type="submit"></form>';
            exit;
        }
    }
    ?>
    
    
    <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    Please choose a file: <input name="file" type="file" /><br />
    <input type="submit" value="Upload" /></form>
    
    
    <?php 
    
    if (!empty($_FILES["file"]))
    {
        if ($_FILES["file"]["error"] > 0)
           {echo "Error: " . $_FILES["file"]["error"] . "<br>";}
        else
           {echo "Stored file:".$_FILES["file"]["name"]."<br/>Size:".($_FILES["file"]["size"]/1024)." kB<br/>";
           move_uploaded_file($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);
           }
    }
    
        // open this directory 
        $myDirectory = opendir(".");
        // get each entry
        while($entryName = readdir($myDirectory)) {$dirArray[] = $entryName;} closedir($myDirectory);
        $indexCount = count($dirArray);
            echo "$indexCount files<br/>";
        sort($dirArray);
    
        echo "<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks><TR><TH>Filename</TH><th>Filetype</th><th>Filesize</th></TR>\n";
    
            for($index=0; $index < $indexCount; $index++) 
            {
                if (substr("$dirArray[$index]", 0, 1) != ".")
                {
                echo "<TR>
                <td><a href=\"$dirArray[$index]\">$dirArray[$index]</a></td>
                <td>".filetype($dirArray[$index])."</td>
                <td>".filesize($dirArray[$index])."</td>
                    </TR>";
                }
            }
        echo "</TABLE>";
        ?>
    

    【讨论】:

      【解决方案3】:

      进行以下更改并尝试。

      <form method="post" action="" enctype="multipart/form-data" >
      

      【讨论】:

        【解决方案4】:

        HTML

         <!DOCTYPE html>
        <html>
        <body>
        
        <form action="upload.php" method="post" enctype="multipart/form-data">
            Select image to upload:
            <input type="file" name="fileToUpload" id="fileToUpload">
            <input type="submit" value="Upload Image" name="submit">
        </form>
        
        </body>
        </html>
        

        php

        <?php
        $target_dir = "uploads/";
        $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
        $uploadOk = 1;
        $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
        // Check if image file is a actual image or fake image
        if(isset($_POST["submit"])) {
            $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
            if($check !== false) {
                echo "File is an image - " . $check["mime"] . ".";
                $uploadOk = 1;
            } else {
                echo "File is not an image.";
                $uploadOk = 0;
            }
        }
        ?>
        

        【讨论】:

        • 你能解释一下你的答案和例如有什么区别吗? @Solutioners 是吗?您的回答包括其他人尚未提及的哪些内容?
        • 我觉得他好浪费。
        • 使用getimagesize()检查上传的文件是否真的是图片
        【解决方案5】:
        <html>
        <body>
        <form action="" method="post" ectype="multipart/form-data">
        <label for="file">Filename:</label>
        <input type="file" name="file" id="file"></br>
        <input type="submit" name="submit" value="Submit">
        </form>
        <?php
        if(isset($_POST['submit']))
        {
        $allowedExts = array("gif", "jpeg", "jpg", "png");
        $temp = explode(".", $_FILES["file"]["name"]);
        $extension = end($temp);
        if ((($_FILES["file"]["type"] == "image/gif")
        || ($_FILES["file"]["type"] == "image/jpeg")
        || ($_FILES["file"]["type"] == "image/jpg")
        || ($_FILES["file"]["type"] == "image/pjpeg")
        || ($_FILES["file"]["type"] == "image/x-png")
        || ($_FILES["file"]["type"] == "image/png"))
        && ($_FILES["file"]["size"] < 20000000)
        && in_array($extension, $allowedExts))
          {
          if ($_FILES["file"]["error"] > 0)
            {
            echo "Return Code: " . $_FILES["file"]["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>";
           if (file_exists("upload/" . $_FILES["file"]["name"]))
              {
              echo $_FILES["file"]["name"] . " already exists. ";
              }
            else
              {
              move_uploaded_file($_FILES["file"]["tmp_name"],
              "upload/" . $_FILES["file"]["name"]);
              echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
              }
            }
          }
        else
          {
          echo "Invalid file";
          }enter code here
        }
        ?>
        </body>
        </html>
        

        【讨论】:

        • 一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助。
        【解决方案6】:

        主要问题是您的表单没有通过 http 发送文件内容的选项。 要从输入元素发送二进制数据和文本数据,您需要在表单标签中添加一个额外的属性。

        <form method="post" enctype="multipart/form-data">
        

        然后在php代码中

        试试这条线

        <?php
        
        print_r($_FILES);
        
        ?>
        

        以上代码将显示有关从您的表单上传文件的所有信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-02
          • 1970-01-01
          • 2013-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-06
          • 2012-07-12
          相关资源
          最近更新 更多