当前位置:首页 > PHP > 正文内容

php8.1引入fsync函数/fdatasync函数的作用

高老师5年前 (2022-01-07)PHP2383

php8.1引入了了两个函数,分别为fsync和fdatasync,主要是为了PHP提供更强大IO控制能力。我们通常使用fwrite函数来对文件进行写入操作,我们认为该函数一旦返回成功,数据便已经写到了文件中,事实上是不太正确的。文件的write操作,更新的只是内存中的页缓存,而脏页不会立即更新到硬盘中,而是由操作系统统一调度。

于是一般情况下我们的写入操作如下:

(1).数据复制到其中一个缓冲区中,缓冲区未满不会动

(2).缓存区满了再将该缓冲排入到输出队列,数据到达队首时,才进行实际的I/O操作

因此很多时候我们的程序只是走到第一步,其他的由操作系统来自行处理。

但是很多应用程序对文件写入的要求非常高,不允许丢失数据,比如数据库。于是UNIX提供了3个api,分别是sync/fsync/fdatasync函数。

sync函数:

sync函数主动将所有修改过的块缓冲区排入写队列就完事儿,剩下的由操作系统来

fsync函数:

fsync函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。(非常适合数据库,一定能保证写入到磁盘)

fdatasync函数:

fdatasync函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的属性。

因此对于PHP8.1版本文件写入有要求的可以使用新的api了:

<?php
$file = 'gao.txt';
$stream = fopen($file, 'w');
fwrite($stream, '高三峰');
fwrite($stream, "\r\n");
fsync($stream);
fclose($stream);

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/214.html

分享给朋友:

“php8.1引入fsync函数/fdatasync函数的作用” 的相关文章

php生成验证码

php生成验证码

<?php //高先生简单验证码. //随机数 //为什么循环0-15的数字 //因为要实现最简单的字母和数字混搭 //16进制0-9   a-f //dechex 十进制转换为16进制 //创建一个四位的验证码. //$nmsg.  ...

php上传大文件,php大文件上传

php上传大文件,php大文件上传

(1).前端文件:<form action="upload.php" method="post" enctype="multipart/form-data">    &...

PHP yield  PHP协程,PHP协程用法学习

PHP yield PHP协程,PHP协程用法学习

【一】.迭代器迭代是指反复执行一个过程,每执行一次叫做一次迭代。比如下面的代码就叫做迭代:1.  <?php   2.  $data = ['1', '2', &...

php定义常量数组

php定义常量数组

<?php //php7+ define('CONFIG', [     'MYSQL' => '127.0.0.1',     ...

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

经常我们下载国外资源容易被墙,可以通过php脚本获取远程文件流然后输出给我们的浏览器来下载。<?php //设置下载文件的url $url = 'https://mirrors.huaweicloud.com/ubuntukylin/ubuntukylin-19....

php elasticsearch基础使用

php elasticsearch基础使用

elasticsearch的操作都是基于http协议的,已经有现成的php类库,composer安装即可。{     "require": {        &...