异步读取文件
1. swoole_async_readfile
// 函数风格
swoole_async_readfile(string $filename, mixed $callback);
// 命名空间风格
Swoole\Async::readFile(string $filename, mixed $callback);
返回结果
文件不存在会返回false,
成功打开文件立即返回true,
数据读取完毕后会回调指定的callback函数。
注意:
-
swoole_async_readfile会将文件内容全部复制到内存,所以不能用于大文件的读取;
-
swoole_async_readfile最大可读取4M的文件。
示例
swoole_async_readfile(__DIR__."/1.txt", function($filename, $content){
echo "文件名:".$filename.PHP_EOL;
echo "内容:".$content.PHP_EOL;
});
Swoole\Async::readfile(__DIR__."/1.txt", function($filename, $content){
echo "filename:".$filename.PHP_EOL;
echo "content:".$content.PHP_EOL;
});
2. swoole_async_read
swoole_async_read(string $filename, mixed $callback, int $size = 8192, int $offset = 0);
回调函数
callback(string $filename, string $content);
$callback函数,可以通过return true/false,来控制是否继续读下一段内容。
- return true,继续读取
- return false,停止读取并关闭文件
特点
异步读文件,使用此函数读取文件是非阻塞的,当读操作完成时会自动执行回调指定的函数。
此函数与swoole_async_readfile不同,它是分段读取,可以用于读取超大文件。
每次只读$size个字节,不会占用太多内存。
异步写入文件
1. swoole_async_writefile
// 命名空间风格
Swoole\Async::writeFile(string $filename, string $fileContent, callable $callback = null, int $flags = 0)
// 函数风格
swoole_async_writefile($filename, $file_content, function($filename) {
echo "wirte ok.\n";
}, $flags = 0);
参数说明
-
$filename:文件的名称,必须有可写权限,文件不存在会自动创建。打开文件失败会立即返回false
-
$fileContent:要写入到文件的内容,最大可写入4M
-
$callback:回调函数(可选)
-
$flags:写入的选项,可以使用FILE_APPEND表示追加到文件末尾
-
如果文件已存在,底层会覆盖旧的文件内容
示例
$content = date("Ymd H:i:s").PHP_EOL;
swoole_async_writefile(__DIR__."/1.txt",$content,function($filename){
echo "success".PHP_EOL;
},FILE_APPEND);
echo "start".PHP_EOL;