zoukankan      html  css  js  c++  java
  • PHP 文件上传

    众所周知,文件上传在一些网站应用中是必不可少的一部分。比如个人博客上传个性头像,一些论坛分享好的学习资料等,这就涉及到使用表单处理文件上传的知识,在php中 我们可以使用$_FILES这个全局数组来处理。下面就看看基本的文件上传处理部分。

    0x01创建一个文件上传表单

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

    有关上面的 HTML 表单的一些注意项列举如下:

    • <form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
    • <input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

    0x02创建上传脚本

     <?php
     if ($_FILES["file"]["error"] > 0)
     {
     echo "Error: " . $_FILES["file"]["error"] . "<br>";
     }
     else
     {
     echo "Upload: " . $_FILES["file"]["name"] . "<br>";
     echo "Type: " . $_FILES["file"]["type"] . "<br>";
     echo "Size: " . ($_FILES["file"]["size"] / 1024) . " <br>";
     echo "Stored in: " . $_FILES["file"]["tmp_name"];
     }
     ?> 

    通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

    第一个参数是表单的 input name,第二个下标可以是 "name"、"type"、"size"、"tmp_name" 或 "error"。如下所示:

    • $_FILES["file"]["name"] - 被上传文件的名称
    • $_FILES["file"]["type"] - 被上传文件的类型
    • $_FILES["file"]["size"] - 被上传文件的大小,以字节计
    • $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
    • $_FILES["file"]["error"] - 由文件上传导致的错误代码

    $_FILES["file"]["error"]中的["error"]值情况

    0:没有错误发生,文件上传成功
    
    1:上传的文件超过了 php.ini中upload_max_filesize(默认情况为2M) 选项限制的值
    
    2:上传文件的大小超过了 HTML表单中MAX_FILE_SIZE选项指定的值
    
    3:文件只有部分被上传
    
    4:没有文件被上传
    
    5:传文件大小为0

    0x03上传限制

    在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif 和 .jpeg 文件,文件大小必须小于 20 kB:

    allowedExts = array("gif", "jpeg", "jpg", "png");
     $temp = explode(".", $_FILES["file"]["name"]);        //把字符串打散成数组。此处$temp[0]==文件名,$temp[1]==扩展名
    $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"] < 20000)
     && in_array($extension, $allowedExts))         //判断扩展名是否在数组$allowedExts中
     {
     if ($_FILES["file"]["error"] > 0)
     {
     echo "Error: " . $_FILES["file"]["error"] . "<br>";
     }
     else
     {
     echo "Upload: " . $_FILES["file"]["name"] . "<br>";
     echo "Type: " . $_FILES["file"]["type"] . "<br>";
     echo "Size: " . ($_FILES["file"]["size"] / 1024) . " <br>";
     echo "Stored in: " . $_FILES["file"]["tmp_name"];
     }
     }
     else
     {
     echo "Invalid file";
     }
     ?> 

    0x04保存被上传的文件

    上面的实例在服务器的 PHP 临时文件夹中创建了一个被上传文件的临时副本。

    这个临时的副本文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

     <?php
    /*上传限制*/
    $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"] < 20000) && 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) . " <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"]); //移动上传文件到upload目录下 echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; } ?>
  • 相关阅读:
    RN-Android构建失败:Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'AwesomeProject'.
    Android更新包下载成功后不出现安装界面
    真机调试: The application could not be installed: INSTALL_FAILED_TEST_ONLY
    react native 屏幕尺寸转换
    Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
    React Native安卓真机调试
    git提交代码报错Permission denied, please try again
    The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
    命令行设置快捷命令
    Linux 常用指令
  • 原文地址:https://www.cnblogs.com/0nth3way/p/7190310.html
Copyright © 2011-2022 走看看