当我们需要上传大文件时,常常会遇到上传失败,上传慢等问题,这时我们就可以通过表单直接提交大文件的方式来解决。
以下是PHP通过表单直接提交大文件的详细攻略:
- 修改php.ini配置文件
在服务器上找到php.ini文件,然后找到以下几个参数并修改:
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_time = 300
memory_limit = 128M
其中,upload_max_filesize和post_max_size分别指上传文件和表单数据的最大大小,这里设为64M;max_execution_time和max_input_time分别指PHP脚本执行的最大时间和脚本输入的最大时间,这里设为300秒;memory_limit指定脚本使用的最大内存,这里设为128M。
- 编写HTML表单
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">选择文件:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="上传">
</form>
enctype="multipart/form-data"指定了表单数据的编码方式,可以支持上传文件。
- 编写PHP上传脚本
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_FILES['file']) && $_FILES['file']['error'] == UPLOAD_ERR_OK) {
$temp_name = $_FILES['file']['tmp_name'];
$new_name = 'uploads/' . $_FILES['file']['name'];
move_uploaded_file($temp_name, $new_name);
echo "上传成功";
} else {
echo "上传失败";
}
}
?>
首先判断是否是POST请求,并且判断是否有文件上传,并且上传是否成功。成功就将上传的文件移动到指定目录,失败则输出错误信息。
- 示例说明
示例1
假设我们要上传一个大小为100M的图片文件,我们可以按照以上步骤修改配置文件、编写HTML表单和PHP上传脚本,然后将该图片文件选择后点击上传按钮。上传完成后,可以在指定的uploads目录下看到我们刚才上传的图片文件,同时也会输出上传成功的提示信息。
示例2
为了更好地说明表单直接提交大文件的过程,我们可以使用PHP的官方示例代码来上传大文件。
首先下载示例代码:
git clone https://github.com/thinkphp/file-upload.git
然后修改config.php文件,改为以下内容:
return [
// 允许上传的后缀
'ext' => 'jpg,png,gif,jpeg',
// 允许上传的大小,单位M
'size' => 100,
// 默认分片大小,单位KB
'chunk_size' => 102400,
// 默认上传并发数
'concurrent' => 3,
// 临时目录
'temp_path' => 'temp/',
// 上传目录
'save_path' => 'uploads/',
];
这里设置允许上传的后缀为jpg、png、gif、jpeg,允许上传的大小为100M,上传时分片大小为100M,上传并发数为3,临时目录为temp/,上传目录为uploads/。
然后打开文件index.php,修改form表单中的Action,改为:
<form id="uploadForm" action="server.php" method="post" enctype="multipart/form-data" onsubmit="return false;">
这里把文件上传的Action改为server.php,这个文件就是上传处理的PHP文件。
最后打开命令行,进入到file-upload目录,执行以下命令:
php -S localhost:8888
使用浏览器访问 http://localhost:8888/index.php ,就可以看到示例代码了。
在示例代码中,我们可以上传大于2G的文件,上传过程中会分片上传,并且支持断点上传,如果上传失败会自动重试,详见示例代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP如何通过表单直接提交大文件详解 - Python技术站