本文正在参加「金石计划 . 瓜分6万现金大奖」
本文环境 PHP8.1,Mysql5.7 不懂的可以评论或联系我邮箱:owen@owenzhang.com 著作权归OwenZhang所有。商业转载请联系OwenZhang获得授权,非商业转载请注明出处。
背景
本文介绍php OSS文件读取和写入文件, workerman 生成临时文件并输出浏览器下载
php文件操作介绍
- fstat函数:显示文件的所有信息
- 文件读取: fread(fp,filesize(file_path));
- 写入文件:file_put_contents(file_path,con,FILE_APPEND);
- 文件操作的应用:可以操作ini文件。将服务器的配置写在ini文件中,再对其进行操作。
- 拷贝文件:copy("e:2.txt","d:1.txt")
- 创建文件夹:mkdir($path,0777,true)
workerman介绍
Workerman是一款纯PHP开发的开源高性能的PHP 应用容器。
Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的服务框架,你可以用它开发tcp代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。
实际上Workerman类似一个PHP版本的nginx,核心也是多进程 Epoll 非阻塞IO。Workerman每个进程能维持上万并发连接。由于本身常驻内存,不依赖Apache、nginx、php-fpm这些容器,拥有超高的性能。同时支持TCP、UDP、UNIXSOCKET,支持长连接,支持Websocket、HTTP、WSS、HTTPS等通讯协议以及各种自定义协议。拥有定时器、异步socket客户端、异步Redis、异步Http、异步消息队列等众多高性能组件。
读取文件
代码语言:javascript复制 //读取文件
header("Content-Type: text/html;charset=utf-8"); //设置字符编码
$file = base_path() . "/public/index.m3u8";
$read = fopen($file, 'r');
$contents = fread($read, filesize($file));
$string1 = getBeforeString($contents, 'enc.key');
$string2 = getLaterString($contents, 'enc.key');
$newContents = $string1 . 'enc.key?token=123' . $string2;
fclose($read);
写入文件
代码语言:javascript复制 //写入文件、
$file = base_path() . "/public/test22.m3u8";
$handle = fopen($file, 'w'); //打开文件
fwrite($handle, $newContents); //写入内容
fclose($handle); //关闭文件
readfile($file); //读取并输出文件全部内容
return redirect(WEB_URL . '/test22.m3u8');//调转页面
读取oss文件,读取文件每行内容
代码语言:javascript复制//读取OSS文件
$file = OSS_URL . $url1;
//文件内容加入数组
$fileContent = @file($file);
$newContent = '';
//遍历文件的每一行
foreach ($fileContent as $value) {
//文件该行是否存在这个字符,有这替换内容
if (strpos($value, 'api.qingsong.chaotuapp.com/') !== false) {
$value = str_replace('app.com/', "q.com/ckey", $value);
}
//文件该行是否存在这个字符,有这拼接内容
if (strpos($value, '.ts') !== false) {
$value = $ossUrl . $value;
}
$newContent .= $value;
}
临时文件写入,生成临时文件并浏览器下载
wokerman框架
代码语言:javascript复制//写入文件
$fileName = "$token.m3u8";
// ./59ee8147cf3f42575bc91ff586d54837.m3u8
$file = "./$fileName";
//打开文件
$handle = fopen($file, 'w');
//写入内容
fwrite($handle, $newContent);
//将文件转字符串
$content = file_get_contents($file);
//删除临时文件
unlink($file);
//输出浏览器
$response = new Response();
return $response->withHeader('content-description', 'File Transfer')
->withHeader('content-type', 'application/force-download')
->withHeader('content-disposition', "attachment; filename={$fileName}")
->withHeader('content-transfer-encoding', 'binary')
->withHeader('pragma', 'public')
->withBody($content);
本文正在参加「金石计划 . 瓜分6万现金大奖」