PHP - 文件上传



在典型的PHP Web应用程序中,一个常见的需求是允许用户上传文件。在PHP中,从客户端上传文件非常容易。本章我们将学习如何使用PHP脚本进行文件上传过程。

文件上传过程遵循以下步骤:

  • 用户打开包含HTML表单的页面,该表单包含文本文件、浏览按钮和提交按钮。

  • 用户单击浏览按钮,并从本地电脑选择要上传的文件。

  • 所选文件的完整路径显示在文本字段中,然后用户单击提交按钮。

  • 所选文件被发送到服务器上的临时目录。

  • 在表单的action属性中指定为表单处理程序的PHP脚本检查文件是否已到达,然后将文件复制到目标目录。

  • PHP脚本向用户确认成功。

为了执行此操作,我们必须首先确保在“php.ini”中启用了与文件上传相关的配置设置。

打开“php.ini”文件,并确保通过删除file_uploads、upload_tmp_dir、upload_max_filesize和max_file_uploads参数前的分号(;)来启用以下设置:

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; https://php.net/file-uploads
file_uploads=On

; Temporary directory for HTTP uploaded files (will use system
; default if not specified).
; https://php.net/upload-tmp-dir
upload_tmp_dir="C:\xampp\tmp"

; Maximum allowed size for uploaded files.
; https://php.net/upload-max-filesize
upload_max_filesize=40M

; Maximum number of files that can be uploaded via a single request
max_file_uploads=20

临时位置和最终位置的文件夹都必须设置允许文件写入的权限。如果任何一个设置为只读,则进程将失败。

创建文件上传表单

接下来,我们需要设计一个用于文件上传的HTML表单。表单的method属性必须为POST,enctype必须为multipart/form-data。使用input类型为file,允许用户浏览并选择要上传的文件。

<h2>File Upload Form</h2>
<form method = "POST" action = "uploadfile.php" enctype="multipart/form-data">
   <label for="file">File name:</label>
   <input type="file" name="uploadfile" />
   <input type="submit" name="submit" value="Upload" />
</form>

创建上传脚本

uploadfile.php脚本接收上传的文件。文件数据收集在超全局变量$_FILES中。获取上传文件的name、file type、size和tmp_name属性。

move_uploaded_file()函数将选定的文件复制到文档文件夹。

<?php
   echo "<b>File to be uploaded: </b>" . $_FILES["uploadfile"]["name"] . "<br>";
   echo "<b>Type: </b>" . $_FILES["uploadfile"]["type"] . "<br>";
   echo "<b>File Size: </b>" . $_FILES["uploadfile"]["size"]/1024 . "<br>";
   echo "<b>Store in: </b>" . $_FILES["uploadfile"]["tmp_name"] . "<br>";

   if (file_exists($_FILES["uploadfile"]["name"])){
      echo "<h3>The file already exists</h3>";
   } else {
      move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $_FILES["uploadfile"]["name"]);
      echo "<h3>File Successfully Uploaded</h3>";
   }
?>

假设myform.php和uploadfile.php这两个文件都存储在文档文件夹中。

在浏览器中打开“myform.php”(**https://127.0.0.1/myform.php**):

PHP File Uploading 1

单击**文件**按钮,浏览到要上传的目标文件,然后单击**上传**按钮。

服务器将返回以下消息:

PHP File Uploading 2
广告