首页 > 后端开发 > 正文

php7框架大文件 PHP中如何使用TUS协议来实现大文件的断点续传

2023-09-24 14:01:38 | 我爱编程网

大家平时对后端开发都十分关注,今天为大家整理了php7框架大文件 PHP中如何使用TUS协议来实现大文件的断点续传,下面就随我爱编程网小编一起来看一下吧。

php7框架大文件 PHP中如何使用TUS协议来实现大文件的断点续传

PHP中如何使用TUS协议来实现大文件的断点续传



【相关学习推荐:php图文教程】



你是否曾经为大文件上传而苦恼?如果文件上传的过程中,因为某种原因中断了,是否可以从中断的位置继续上传,而不用重新上传整个文件?如果你有这样的困惑,那么请继续阅读下面的内容。

在现代网站应用中,上传文件是非常常见的。在任何语言中,通过使用一些工具,都可以实现文件上传的功能。但是,如果处理大文件上传的需求,还是有点麻烦的。
假如你此时正在上传一个很大的文件,大约一个小时过去了,进度是 90%。突然断网了或者浏览器崩溃了,上传的程序退出,你要再全部重新来过。真的很不爽,对不对?还有更让人郁闷的是,如果你的网速很慢,那么,无论你重来多少次,你都不可能上传成功。
在 PHP 中,我们可以尝试利用 tus 协议的断点续传功能来解决这个问题。
什么是 tus?Tus 是一个基于 HTTP 的 文件断点续传开放协议。 断点续传的意思是不管是用户自行中断,还是由于网络等原因的意外中断,都可以从中断的地方继续上传,而不用重新开始。
Tus 协议是在 2017年5月被 Vimeo 采用的。
为什么用 tus?引用 Vimeo 的博客:
我们之所以决定用 tus,是因为它能以简洁开放的形式,将文件上传的过程标准化。这种标准化有利于 API 的开发者更加专注于应用本身的逻辑,而非文件上传的过程。
使用这种方式上传的另一个好处是,你可以在笔记本上开始上传文件,然后又转到手机或者其他设备继续上传同一个文件,这可以极大地提升用户体验。
图片: Tus 大致的工作流程
开始第一步,加载依赖。
$ composer require ankitpokhrel/tus-phptus-php 是用于 tus 断点续传协议 v1.0.0 的一个的纯 PHP 框架,完美实现了 服务端与客户端的交互 。
更新: 现在 Vimeo 官方 PHP 库 的 v3 用的是 TusPHP。
创建一个处理请求的服务端你可以像下面这样创建一个服务端.
// server.php
$server = new TusPhpTusServer('redis');
$response = $server->serve();
$response->send();
exit(0); // 退出当前 PHP 进程你需要配置你的服务器以便能对特定的终端进行响应. 如果使用 Nginx 的话你可以像下面这样配置:
# nginx.conf
location /files {
try_files $uri $uri/ /path/to/server.php?$query_string;
}假设我们服务端的 URL 是 因此, 基于我们上面的 Nginx 配置,我们可以通过 来访问到我们的 tus 终端.
基于 RESTful 风格的端点配置:
# 获取有关服务器目前配置的信息
OPTIONS /files
# 检查上传的文件是否合法
HEAD /files/{upload-key}
# 创建
POST /files
# 修改
PATCH /files/{upload-key}
# 删除
DELETE /files/{upload-key}查看 协议细则 获取更多关于路由的信息。
如果你是用类似于 Laravel 的框架,那么你就不需要在配置文件里定义这些了, 可以直接定义路由来访问 tus 的基础端点。我们会在另外的教程里介绍相关细节。
使用 tus-php 客户端处理上传服务器到位后,客户端可以块的形式上传文件。 让我们首先创建一个简单的HTML表单来获取用户的输入。
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="tus_file" id="tus-file" />
<input type="submit" value="Upload" />
</form>提交表单后,我们需要按照几个步骤来处理上传。
创建一个 tus-php 客户端对象// Tus client
$client = new TusPhpTusClient('');上面代码中的第一个参数是你的tus服务器地址。
2. 使用文件元数据初始化客户端
为了确保上传文件的唯一性,我们需要给每个上传的文件以唯一标识。这样在文件中断后续传的时候,服务器就可以很清晰地辨识出,哪几个片段是属于同一个文件得。这个标识码可以自己指定,也可以由系统生成。
// 设置标识码和文件元数据
$client->setKey($uploadKey)
->file($_FILES['tus_file']['tmp_name'], 'your file name');如果不想指定标识码,可以这样写,由系统会自动生成:
$client->file($_FILES['tus_file']['tmp_name'], 'your file name');
$uploadKey = $client->getKey(); // Unique upload key3. 分块上传文件
// $chunkSize 是以字节为单位的,例如 5000000 等于 5 MB
$bytesUploaded = $client->upload($chunkSize);当你想要续传下一块的时候,就可以带上同样的标识码参数来续传。
// 在下一个请求中续传文件
$bytesUploaded = $client->setKey($uploadKey)->upload($chunkSize);文件全部上传完成后,默认情况下,服务器会使用 sha256 来校验文件总和,以确保不会有丢失的文件。
使用 tus-js-client 客户端处理文件上传tus 协议的团队还开发了一个模块化的文件上传插件 Uppy。这个插件可以在官方 tus-js-client 和 tus-php 服务器之间建立连接。也就是说我们可以使用 php 配合 js 来实现文件上传了。
uppy.use(Tus, {
endpoint: ' // 你的 tus 服务器
resume: true,
autoRetry: true,
retryDelays: [0, 1000, 3000, 5000]
})更多细节可以查看 uppy 的文档, 这里 还有些例子可以供你参考。
分块上传tus-php 服务器支持 concatenation 扩展,可以把多次上传的文件合为一个文件。因此,我们可以在客户端支持并行上传以及非连续的分块文件上传。
使用 tus-php 实现分块上传
tus-partial-upload.php
<?php
// 文件唯一标识码
$uploadKey = uniqid();
$client->setKey($uploadKey)->file('/path/to/file', 'chunk_a.ext');
// 从第 1000 个字节开始上传 10000 字节
$bytesUploaded = $client->seek(1000)->upload(10000);
$chunkAkey = $client->getKey();
// 从 第 0 个字节开始上传 10000 字节
$bytesUploaded = $client->setFileName('chunk_b.ext')->seek(0)->upload(1000);
$chunkBkey = $client->getKey();
// 从第 11000 个字节 (10000 + 1000) 开始上传剩余的字节
$bytesUploaded = $client->setFileName('chunk_c.ext')->seek(11000)->upload();
$chunkCkey = $client->getKey();
// 把分块上传的文件组合起来
$client->setFileName('actual_file.ext')->concat($uploadKey, $chunkAkey, $chunkBkey, $chunkCkey);分块上传的完整例子 在这里.
总结由于 tus-php 项目 本身还出于初级阶段,后面可能还会有一些改动。在 example 文件夹里,有三个不同的例子供你参考。如果任何问题或者建议,欢迎留言交流。
Happy Coding!
相关学习推荐:php编程(视频)

php7框架大文件 PHP中如何使用TUS协议来实现大文件的断点续传我爱编程网

如何搭建php7最新开发环境搭建

下载必要的软件工具。nginx请到nginx.org下载,php7请到windows.php.net下载。
下载到本地磁盘,放在同一个文件夹下,将上面两个文件解压,注意解压PHP7之后重命名一下(我这里取的是php7,官方的压缩包命名有特殊字符,以防运行出错,最好重命名)。
修改nginx的配置文件nginx.conf。将server{}里面的
location / {
root e:/www;
index index.php index.html index.htm;

}
去掉注释。其中root 是你写的PHP代码的文件夹目录。你可以根据自己的状况自定义。
让nginx支持PHP。找到nginx.conf文件里的
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
下面的配置。将这段配置取消注释,并对fastcgi_param进行修改,注意图片中78行和79行的区别。79行是修改后的正确配置。以上修改完成后保存。
修改将PHP配置文件。将PHP目录下的php.ini.development或php.ini.production重命名为php.ini即可。
启动nginx和PHP7。对于nginx直接鼠标双击就可以了。而PHP需要在命令提示符中打开,执行 D:\wnmp\php7\php-cgi.exe -b 127.0.0.1:9000 路径可能因不同的文件存放而不同。
最后在上面配置中root 所配置的文件夹目录下新建index.php文件,里面内容为
<?php
phpinfo();
?>
打开浏览器,网址输入localhost,即可出现如下内容。到此PHP7开发环境已经搭建完成。希望能帮到你,我还要抓紧时间自己在后盾人平台自己学习呢,一起加油吧( ˘•ω•˘ )

php7框架大文件 PHP中如何使用TUS协议来实现大文件的断点续传

php7怎么安装mysql扩展


php7安装mysql扩展的方法:1、下载mysql扩展;2、进行configure;3、执行【make && make install】命令;4、编辑php.ini文件,添加配置【extension=pdo_mysql.so】。
具体步骤如下:
(视频教程推荐:php视频教程)
1、下载mysql扩展
2、解压后并使用phpize工具初始化(phpize一般在php安装目录/bin/下面)
在扩展解压后的文件夹里执行/www/server/php/71/bin/phpize
3、进行configure
./configure --with-php-config=/www/server/php/71/bin/php-config4、编译安装
make && make install这一步结束后,系统会提示:
Installing shared extensions: /www/server/php/71/lib/php/extensions/no-debug-non-zts-20160303/我们要的mysql.so就在这个路径里面。
这个路径同时也是默认的extension_dir:
PHP默认的extension_dir路径
5、修改php.ini
在php.ini文件中增加一行:
extension=pdo_mysql.so保存,重启服务。
如果修改extension_dir,就需要把mysql.so这个文件拷贝到对应的路径。

以上就是今天分享给大家的内容了,想要了解更多后端开发资讯,敬请关注我爱编程网!
与“php7框架大文件 PHP中如何使用TUS协议来实现大文件的断点续传”相关推荐
php7tp框架大文件上传 PHP中如何使用TUS协议来实现大文件的断点续传
php7tp框架大文件上传 PHP中如何使用TUS协议来实现大文件的断点续传

PHP中如何使用TUS协议来实现大文件的断点续传【相关学习推荐:php图文教程】你是否曾经为大文件上传而苦恼?如果文件上传的过程中,因为某种原因中断了,是否可以从中断的位置继续上传,而不用重新上传整个文件?如果你有这样的困惑,那么请继续阅读下面的内容。在现代网站应用中,上传文件是非常常见的。在任何语言中,通过使用一些工具,都可以实现文件上传的功能。但是,如果处理大文件上传

2023-10-06 23:24:26
php文件上传框架 如何在php上实现文件上传功能
php文件上传框架 如何在php上实现文件上传功能

如何在php上实现文件上传功能PHP一般使用POST方法上传文件,下面是一个简单的文件上传示例,里面有相关的注释:up.htm文件:----------&lt;html&gt;&lt;head&gt;&lt;metahttp-equiv="Content-Type"content="text/html;charset=gb2312"&gt;&lt;title&gt;U

2023-09-10 08:19:24
php用框架上传直接复制 php如何实现文件上传
php用框架上传直接复制 php如何实现文件上传

php如何实现文件上传所谓上传就是把文件从你电脑本地复制到你的项目指定文件夹下。但这有个中间过程,就是复制到系统指定的临时文件夹生成临时文件。然后将临时文件复制到你指定的文件夹下。剩下的就是各种验证了。给你个图片上传方法//上传一张图片$pic=$_FILES['pic'];functionupload($pic){$tmp_name=$pic['tmp_na

2023-10-04 01:50:20
使用php框架文件上传 php文件上传代码怎么写
使用php框架文件上传 php文件上传代码怎么写

php文件上传代码怎么写php文件上传代码怎么写在初学php的时候,我们无法理解php文件上传的代码,以及上传的逻辑,以下代码从初学者的角度编写,希望对大家有帮助!需要用到的知识:超级全局数组:$_FILES$_FILES['myfile']['name']的值是:客户端文件系统的文件名称$_FILES['myfile']['type']的值是:客户端传递的文件类型

2023-09-22 15:31:55
php拖拽框架 html5+php如何实现文件拖动上传功能
php拖拽框架 html5+php如何实现文件拖动上传功能

PHP开发网站有没有类似VB那种可以拖拽按钮"画"界面的软件?直接拖拽控件生成php项目的还真没见过,php做web的话一般前端都是html页面,如果单纯以控件的形式做html页面的话,可以用dreamweaver的设计模式界面,做好html页面后再整合到php项目中。具体整合方式需要参考php项目用的是哪款模版引擎,或者是webapi模式的话,则需要用js等前端脚本开发对应的前端逻辑。

2023-09-01 18:55:51
拖拽php框架 html5+php如何实现文件拖动上传功能
拖拽php框架 html5+php如何实现文件拖动上传功能

PHP最常用的框架是那几个·_php开发框架排行一直以来php框架被广泛利用,多半都是基于mvc架构模式的,还有基于事件驱动模式的,大致列举几个。ThinkPHP是一个性能卓越并且功能丰富的轻量级PHP开发框架,本身具有很多的原创特性,并且倡导大道至简,开发由我的开发理念,用最少的代码完成更多的功能,宗旨就是让WEB应用开发更简单、更快速。从1.*版本开始就放弃了对PHP4的兼容,因此整个

2023-09-04 12:09:43
框架php文件如何修改代码 用PHP实现 读取和修改文本文件内容的代码
框架php文件如何修改代码 用PHP实现 读取和修改文本文件内容的代码

php修改php文件内容说实话看了你的写法,真的是相当的奇怪。你既然包含了yyid.php文件,后面又修改yyid.php文件的内容,这不是相当于一个人把自己给提起来吗?要不你就在修改完成后在包含,应该改为:&lt;?php$id=$_POST['pd'];if($id!=''){echo $id."我是中国人";$origin_str = file_get_contents('yyi

2023-09-29 05:30:07
如何用框架打开php文件 php如何打开文件
如何用框架打开php文件 php如何打开文件

PHP文件是什么文件?怎么打开?PHP是一种非常流行的WEB程序语言,超级文本预处理语言,其他的还有ASP,JSP等。简单的说.PHP就是嵌入这种语言后的一个动态网页文件。四种打开php格式文件方法:首先我们来看php文件是什么文件,PHP是一个网页脚本,文件后缀名为.php,php文件打开方式一:用记事本打开右击.php文件,选择记事本打开,就可以看到文

2023-09-27 17:33:29