PHP实现大文件上传,断点续传
Tus 是一个基于 HTTP 的 文件断点续传开放协议。断点续传的意思是不管是用户自行中断,还是由于网络等原因的意外中断,都可以从中断的地方继续上传,而不用重新开始。
加载依赖。
composer require ankitpokhrel/tus-php
直接贴代码
<?php
namespace app\index\controller;
class Index
{
public function index()
{
return view();
}
public function server()
{
// server.php
$server = new \TusPhp\Tus\Server('redis');
$response = $server->serve();
$response->send();
exit(0); // 退出当前 PHP 进程
}
public function upload()
{
$fileObj = request()->file('tus_file');
$fileArr = $fileObj->getInfo();
$uploadKey = $fileObj->md5();;
$chunkSize = 10000000;
$client = new \TusPhp\Tus\Client('http://mytp5.com/index/index/server');
$client->setKey($uploadKey)->file($_FILES['tus_file']['tmp_name'], $fileArr['name']);
$bytesUploaded = $client->setKey($uploadKey)->upload($chunkSize);
echo $bytesUploaded;
}
}
index.html
<form action="index/index/upload" method="post" enctype="multipart/form-data">
<input type="file" name="tus_file" id="tus-file" />
<input type="submit" value="Upload" />
</form>
大文件配置php.ini
upload_max_filesize = 1024M
post_max_size = 1024M
nginx虚拟主机
server {
listen 80;
server_name mytp5.com;
root "E:/www/tp5/public";
client_max_body_size 1024m;
location / {
index index.php index.html error/index.html;
error_page 400 /error/400.html;
error_page 403 /error/403.html;
error_page 404 /error/404.html;
error_page 500 /error/500.html;
error_page 501 /error/501.html;
error_page 502 /error/502.html;
error_page 503 /error/503.html;
error_page 504 /error/504.html;
error_page 505 /error/505.html;
error_page 506 /error/506.html;
error_page 507 /error/507.html;
error_page 509 /error/509.html;
error_page 510 /error/510.html;
include E:/www/tp5/public/nginx.htaccess;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
autoindex off;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
location /files {
try_files $uri $uri/ /index/index/server?$query_string;
}
}
参考文章:http://blog.ncmem.com/wordpress/2023/09/19/php%e5%ae%9e%e7%8e%b0%e5%a4%a7%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0/
欢迎入群一起讨论