29、PHP 新手指南 - 文件上传

2019-07-03

目录

PHP 脚本允许用户使用 HTML 格式上传文件到服务器上。最初的文件被上传到一个临时目录中,随后 PHP 脚本将其转移到最终目录中。

在 phpinfo.php 页面中信息描述用于文件上传的临时目录为 upload_tmp_dir,并且允许最大上传文件为upload_max_filesize。这些参数被设置在 PHP 配置文件 PHP.ini 中

上传文件步骤如下:   

  • 用户打开页面,其中包含 HTML 文本文件表单,浏览按钮和提交按钮。    
  • 用户单击浏览按钮并从本地电脑上选择文件上传。 
  • 选中文件的完整路径出现在文本框中,然后单击提交按钮。    
  • 所选文件被发送到服务器上的临时目录中。    
  • 指定为形式的 PHP 脚本处理程序在表单的动作属性检查文件已经到达后,然后将文件复制到目标目录中。
  • PHP 脚本确认上传成功。

通常,在临时和最终的位置中,写入文件设置权限为允许是很有必要的。如果被设置为只读那么过程将会失败 一个上传文件可以是一个文本文件或图像文件或任何其他文档。

创建上传表单

下面 HTML 代码创建了一个上传表单。这种表单属性设置为 post,enctype属性设置为 multipart/from-data

<html>
    <head>
    <title>File Uploading Form</title>
    </head>
    <body>
    <h3>File Upload:</h3>
    Select a file to upload: <br />
    <form action="/php/file_uploader.php" method="post"
                            enctype="multipart/form-data">
    <input type="file" name="file" size="50" />
    <br />
    <input type="submit" value="Upload File" />
    </form>
    </body>
    </html>

创建一个上传脚本

有一个全局 PHP 变量名为 $_FILES。这个变量是二维数组,保留了所有上传文件的相关信息。因此,如果分配给在上传表单输入值的名称 File,那么 PHP 将创建 5 个变量:

  • $_FILES['file']['tmp_name']-——上传文件在 web 服务器上的临时目录。    
  • $_FILES['file']['name']——上传文件的真实名称。    
  • $_FILES['file']['size']——上传文件的大小以字节为单位。    
  • $_FILES['file']['type']——上传文件的 MIME 类型。    
  • $_FILES['file']['error']——与此文件上传相关的错误代码。

下面例子中脚本试图复制一个在前一节中列出 HTML 表单上传的文件到 /var/www/html 目录中,这是 PHP 服务器文档的根目录,在完成后它会显示所有文件的细节。请注意,如果您要显示上传文件不要使用二进制文件如图片或 Word 文档。

这里的代码 uploader.php 脚本将处理上传的文件。

<?php
    if( $_FILES['file']['name'] != "" )
    {
       copy( $_FILES['file']['name'], "/var/www/html" ) or 
               die( "Could not copy file!");
    }
    else
    {
        die("No file specified!");
    }
    ?>
    <html>
    <head>
    <title>Uploading Complete</title>
    </head>
    <body>
    <h2>Uploaded File Info:</h2>
    <ul>
    <li>Sent file: <?php echo $_FILES['file']['name'];  ?>
    <li>File size: <?php echo $_FILES['file']['size'];  ?> bytes
    <li>File type: <?php echo $_FILES['file']['type'];  ?>
    </ul>
    </body>
    </html>

当你将使用表单上传和脚本上传文件时,显示结果如下:

Uploaded File Info:

    Sent file: uploadedfile.txt
    File size: 2003 bytes
    File type: image/jpg

你自己在网络服务器上尝试上述例子后,如果您有任何问题,请发到论坛上将得到进一步的帮助。