广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中怎么使用DirectIO
  • 840
分享到

PHP中怎么使用DirectIO

2023-06-20 15:06:06 840人浏览 薄情痞子
摘要

本篇内容主要讲解“PHP中怎么使用Directio”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中怎么使用DirectIO”吧!关于PHP的文件操作,我们也将是通过一系列的文章来进行学习。

本篇内容主要讲解“PHP中怎么使用Directio”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习php中怎么使用DirectIO”吧!

关于PHP的文件操作,我们也将是通过一系列的文章来进行学习。今天我们先学习的是一个很少人使用过,甚至很多人根本不知道的扩展,它与我们日常的文件操作有些许的不同。不过这些差别并不是我们肉眼所能直观看到的,主要还是在于业务的需求与性能的平衡。

什么是Direct IO

Direct IO 其实是 linux 操作系统中的一个概念。它的意思是直接操作文件流,为什么说是直接呢?其实在我们的操作系统进行文件操作的时候,并不是马上直接就在磁盘上进行文件的读写,中间还有一层页缓存

既然是缓存,那么它当然是会带来一定的性能提升,但这也并不是完全绝对的。而直接操作就是忽略掉这一层的缓存操作,直接对磁盘上的文件进行读写。我们都知道,磁盘,即使是固态硬盘,它和 CPU 以及内存的处理速度之间都是有着巨大的落差的,默认的页缓存就是用来弥补这种差距。

但是页缓存会加大 CPU 的运算操作以及占用内存,而直接操作则不会有这种问题,但是相对来说,它的速度并不能和带缓存的文件读取操作相媲美。

以上是关于 Direct IO 的一个简单的理解,更详尽的解释大家可以参考文末参考文档中第二条链接的内容并进行深入的学习。在 PHP 中,我们直接在 PECL 下载 Direct IO 扩展就可以按照扩展的正常安装方式进行安装使用。

创建写入文件

既然是文件操作,那么我们首先还是来创建和写入一些文件数据。

$fd = dio_open("./test", O_RDWR | O_CREAT);echo dio_write($fd, "This is Test.I'm ZyBlog.Show me the money4i"), PHP_EOL;// 43print_r(dio_stat($fd));// Array// (//     [device] => 64768//     [inode] => 652548//     [mode] => 35432//     [nlink] => 1//     [uid] => 0//     [gid] => 0//     [device_type] => 0//     [size] => 43//     [block_size] => 4096//     [blocks] => 8//     [atime] => 1602643459//     [mtime] => 1602656963//     [ctime] => 1602656963// )dio_close($fd);

和 f 系列的函数类似,我们需要使用一个 dio_open() 函数来打开一个文件,O_RDWR | O_CREAT 参数的意思是打开一个可读写文件,并且如果文件不存在的话,创建它。这两个常量是与 Linux 中相关的直接操作文件的常量对应的,在文末的链接中也可以看到关于这些常量的解释。

写入操作也是同样的使用一个 dio_write() 就能够完成,它返回的内容是写入的内容长度,这里我们写入了 43 个字符。

dio_stat() 是返回当前文件句柄的一些信息,我们可以看到设备号 device 、uid 、 gid 、 atime 、 mtime 等一些信息,它们和我们在 Linux 中能够看到的信息类似,其实就是这个文件的一些简单的信息。

读取文件

读取文件使用非常简单的使用一个函数就可以完成。

$fd = dio_open("./test", O_RDWR | O_CREAT);echo dio_read($fd), PHP_EOL;// This is Test.I'm ZyBlog.Show me the money4idio_close($fd);

dio_read() 函数还包含另外一个参数,可以按指定的字节长度读取内容,这个在后面我们还会看到相关的示例。

文件操作

在文件的读取过程中,我们有可能只需要读取一部分的内容,或者从某一位置开始读取文件内容,下面的操作函数就是针对这两个方面进行操作的。

$fd = dio_open("./test", O_RDWR | O_CREAT);var_dump(dio_truncate ($fd , 20)); // bool(true)echo dio_read($fd), PHP_EOL;// This is Test.I'm ZyBdio_seek($fd, 3); echo dio_read($fd), PHP_EOL;// s is Test.I'm ZyBdio_close($fd);

其实从名称就可以看出 dio_truncate() 就是用于截断文件内容的。在这里我们从第 20 个字符进行截断,然后再使用 dio_read() 读取的内容就只是前 20 个字符的内容了。

dio_seek() 则是指定从哪一个字符开始读取内容,我们指定开始字符位置为 3 之后,前面三个字符就不会被读取到了。需要注意的是,dio_truncate() 会修改原始文件的内容,而 dio_seek() 则不会修改。

其它设置

$fd = dio_open('./test', O_RDWR | O_NOCTTY | O_NONBLOCK);dio_fcntl($fd, F_SETFL, O_SYNC);dio_tcsetattr($fd, array(  'baud' => 9600,  'bits' => 8,  'stop'  => 1,  'parity' => 0));while (($data = dio_read($fd, 4))!=false) {    echo $data, PHP_EOL;}// This//  is// Test// .I'm//  ZyBdio_close($fd);

dio_fcntl() 函数是调用的 c 函数库中的 fcntl 函数,目的是对文件描述符执行指定的一些操作,这个操作也是以一些常量进行固定的,在这里我们使用的是 F_SETFL ,它的意思是将文件描述符标志设置为指定的值,这个 O_SYNC 表示的是如果设置了这个描述符,则对该文件的写操盘会等到数据被写到磁盘上才结束。当然,这个函数还可以设置很多别的操作符,大家可以参考 PHP 的官方文档进行深入的学习。

dio_tcsetattr() 用于设置打开文件的终端属性和波特率。 baud 表示的就是波特率,bits 表示的是位,stop 表示的是停止位,parity 表示的是奇偶校验位。

关于这方面的内容需要 《计算机组成原理》 及 《操作系统》 中的一些知识,我也并不十分地清楚,所以也就不详细的解释了。从这里就可以看出,大学课堂上的那些基础课程真的是非常地重要,相信好好学过这些专业基础课程的同学一定能马上明白这个函数的作用。

最后,我们在 dio_read() 中使用了第二个参数来根据字节长度读取文件内容,可以看到读取出来的内容是一段一段的以 4 个字符长度为单位的输出。

总结

函数的学习还是比较简单的,核心的还是要知道这个扩展在什么业务场景下更适合使用。在文章开头的介绍中我们已经说明了直接操作文件与普通文件操作的一些区别,在自缓存应用或者需要传输非常大的数据时,直接操作对于 CPU 和 内存 更加地友好。

而其它情况,我们还是使用系统默认的文件操作方式就可以了。其实在大部分情况下,我们基本看不出来它们的显著区别。所以在实际应用中,还是那句话,结合业务实际情况,选择最佳的方案。

测试代码:

https://GitHub.com/zhangyue0503/dev-blog/blob/master/php/202010/source/4.PHP中DirectIO直操作文件扩展的使用.php

到此,相信大家对“PHP中怎么使用DirectIO”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: PHP中怎么使用DirectIO

本文链接: https://www.lsjlt.com/news/297833.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP中怎么使用DirectIO
    本篇内容主要讲解“PHP中怎么使用DirectIO”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP中怎么使用DirectIO”吧!关于PHP的文件操作,我们也将是通过一系列的文章来进行学习。...
    99+
    2023-06-20
  • PHP中DirectIO扩展如何使用
    本篇文章给大家分享的是有关PHP中DirectIO扩展如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。什么是Direct IODirect IO 其实是 Linux 操作...
    99+
    2023-06-20
  • PHP中DirectIO操作文件扩展的用法大全
    关于 PHP 的文件操作,我们也将是通过一系列的文章来进行学习。今天我们先学习的是一个很少人使用过,甚至很多人根本不知道的扩展,它与我们日常的文件操作有些许的不同。不过这些差别并不是...
    99+
    2022-11-12
  • php中files怎么使用
    php中files的使用方法:1、“$_FILES['myFile']['name']”显示客户端文件的原名称;2、“$_FILES['myFile']['type']”文件的...
    99+
    2023-05-25
    php
  • PHP中fullcalendar怎么使用
    FullCalendar是一个基于jQuery的日历插件,可以在网站上展示事件和任务,支持日、周、月三种不同的视图。以下是在PHP中...
    99+
    2023-09-26
    PHP fullcalendar
  • PHP中array_push()怎么使用
    array_push()函数用于向数组的末尾添加一个或多个元素。它的语法如下:array_push(array, value1, v...
    99+
    2023-08-29
    PHP
  • php中怎么使用addslashes
    这篇“php中怎么使用addslashes”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“php中怎么使用addslashes”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接...
    99+
    2023-06-14
  • PHP中PHPDesigner怎么使用
    要使用PHPDesigner,您需要按照以下步骤进行操作:1. 下载并安装PHPDesigner软件。您可以从官方网站(https:...
    99+
    2023-09-17
    PHP
  • php中ajaxfileupload.js怎么使用
    要在PHP中使用ajaxfileupload.js,需要按照以下步骤进行操作:1. 首先,确保你已经引入了ajaxfileuploa...
    99+
    2023-09-25
    php
  • php中br怎么使用
    本篇内容介绍了“php中br怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php中的br是html标记语言,用于文本的换行;在php...
    99+
    2023-06-22
  • php中fgets怎么使用
    这篇文章主要介绍“php中fgets怎么使用”,在日常操作中,相信很多人在php中fgets怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php中fgets怎么使用”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-22
  • php中fwrite怎么使用
    这篇文章主要讲解了“php中fwrite怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中fwrite怎么使用”吧!php中fwrite函数的作用是将内容写入一个打开的文件中,其...
    99+
    2023-06-22
  • php中bcsub怎么使用
    本篇内容主要讲解“php中bcsub怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中bcsub怎么使用”吧!在PHP中,bcsub()函数用于从另一个函数中减去一个任意精度数,该函...
    99+
    2023-06-29
  • php中$_FILES怎么使用
    本篇内容主要讲解“php中$_FILES怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中$_FILES怎么使用”吧!在php中,“$_FILES”是一个预定义的数组变量,用来获取通...
    99+
    2023-06-21
  • PHP中PDO怎么使用
    这篇文章主要介绍了PHP中PDO怎么使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、基本知识1、什么是PDO?PDO就是PHP data Object 提供了PHP操作...
    99+
    2023-06-22
  • php中fetch怎么使用
    本篇内容介绍了“php中fetch怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php中fetch指的是查询数据的fetch方法,p...
    99+
    2023-06-21
  • 怎么使用php中const
    本篇内容介绍了“怎么使用php中const”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const是php中的一个关键字,是用来定义常量的,...
    99+
    2023-06-25
  • PHP中soap怎么使用
    在PHP中,使用SOAP(简单对象访问协议)可以进行远程过程调用(RPC)和构建Web服务。以下是使用SOAP的一般步骤:1. 确保...
    99+
    2023-08-18
    PHP soap
  • php中assign()怎么使用
    在PHP中,assign()函数用于将一个值分配给一个变量。它的基本语法如下:```phpassign($variable, $va...
    99+
    2023-08-19
    php
  • php中cms怎么使用
    使用CMS(内容管理系统)的一般步骤如下:1. 下载和安装CMS软件:从CMS提供的官方网站下载最新版本的软件,并按照官方文档中的指...
    99+
    2023-08-25
    php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作