背景
本文介绍php OSS文件读取和写入文件, workerman 生成临时文件并输出浏览器下载
php文件操作介绍
- fstat函数:显示文件的所有信息
- 文件读取: fread(fp,filesize(fp,filesize(fp,filesize(file_path));
- 写入文件:file_put_contents(filepath,file_path,filepath,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、异步消息队列等众多高性能组件。
读取文件
//读取文件 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);
写入文件
//写入文件、 $file = base_path() . "/public/test22.m3u8"; $handle = fopen($file, 'w'); //打开文件 fwrite($handle, $newContents); //写入内容 fclose($handle); //关闭文件 readfile($file); //读取并输出文件全部内容 return redirect(WEB_URL . '/test22.m3u8');//调转页面
读取oss文件,读取文件每行内容
//读取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框架
//写入文件 $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);