SplStream

资源流数据操作

相关class位置

  • SplStream
    • namespace: EasySwoole\Spl\SplStream

SplStream相关方法

方法名称参数说明
construct$resource = ‘’,$mode = ‘r+’初始化资源和读写操作
toString输出资源
close关闭一个打开的文件指针
detach获取资源并重置资源对象
getSize获取资源大小编码转换
tell返回文件指针读/写的位置
eof文件指针是否到了文件结束的位置
isSeekable获取是否可以在当前流中定位
seek$offset, $whence = SEEK_SET在文件指针中定位
rewind倒回文件指针的位置
isWritable是否可写
write$string写入内容
isReadable是否可读
read$length读取内容
length获取字符串长度
getContents读取资源流到一个字符串
getMetadata$key = null从封装协议文件指针中取得报头/元数据
getStreamResource获取资源
truncate$size = 0将文件截断到给定的长度

基本使用

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: root
  5. * Date: 19-7-2
  6. * Time: 上午10:25
  7. */
  8. require_once 'vendor/autoload.php';
  9. //初始化资源和读写操作
  10. $resource = fopen('./test.txt', 'ab+');
  11. $stream = new \EasySwoole\Spl\SplStream($resource);
  12. var_dump($stream->__toString());
  13. /**
  14. * 输出结果过:
  15. * string(10) "Easyswoole"
  16. */
  17. //输出资源
  18. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  19. var_dump($stream->__toString());
  20. /**
  21. * 输出结果过:
  22. * string(10) "Easyswoole"
  23. */
  24. //关闭一个打开的文件指针
  25. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  26. $stream->close();
  27. var_dump($stream->__toString());
  28. /**
  29. * 输出结果过:
  30. * string(0) ""
  31. */
  32. //获取资源并重置资源对象
  33. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  34. $stream->detach();
  35. var_dump($stream->__toString());
  36. /**
  37. * 输出结果过:
  38. * string(0) ""
  39. */
  40. //获取资源大小
  41. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  42. $size = $stream->getSize();
  43. var_dump($size);
  44. /**
  45. * 输出结果过:
  46. * int(10)
  47. */
  48. //返回文件指针读/写的位置
  49. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  50. $position = $stream->tell();
  51. var_dump($position);
  52. /**
  53. * 输出结果过:
  54. * int(10)
  55. */
  56. //文件指针是否到了文件结束的位置
  57. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  58. $eof = $stream->eof();
  59. var_dump($eof);
  60. $stream->detach();
  61. $eof = $stream->eof();
  62. var_dump($eof);
  63. /**
  64. * 输出结果过:
  65. * bool(false)
  66. * bool(true)
  67. */
  68. //获取是否可以在当前流中定位
  69. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  70. $seekable = $stream->isSeekable();
  71. var_dump($seekable);
  72. /**
  73. * 输出结果过:
  74. * bool(true)
  75. */
  76. //在文件指针中定位
  77. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  78. $stream->seek(2);
  79. $position = $stream->tell();
  80. var_dump($position);
  81. /**
  82. * 输出结果过:
  83. * int(2)
  84. */
  85. //倒回文件指针的位置
  86. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  87. $stream->rewind();
  88. $position = $stream->tell();
  89. var_dump($position);
  90. /**
  91. * 输出结果过:
  92. * int(0)
  93. */
  94. //是否可写
  95. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  96. $writeAble = $stream->isWritable();
  97. var_dump($writeAble);
  98. /**
  99. * 输出结果过:
  100. * bool(true)
  101. */
  102. //写入内容
  103. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  104. $stream->write(', 666');
  105. var_dump($stream->__toString());
  106. /**
  107. * 输出结果过:
  108. * string(15) "Easyswoole, 666"
  109. */
  110. //是否可读
  111. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  112. $readAble = $stream->isReadable();
  113. var_dump($readAble);
  114. /**
  115. * 输出结果过:
  116. * bool(true)
  117. */
  118. //读取内容
  119. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  120. $stream->rewind();
  121. $string = $stream->read(4);
  122. var_dump($string);
  123. /**
  124. * 输出结果过:
  125. * string(4) "Easy"
  126. */
  127. //读取资源流到一个字符串
  128. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  129. $stream->rewind();
  130. $string = $stream->getContents();
  131. var_dump($string);
  132. /**
  133. * 输出结果过:
  134. * string(10) "Easyswoole"
  135. */
  136. //从封装协议文件指针中取得报头/元数据
  137. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  138. $meta = $stream->getMetadata();
  139. var_dump($meta['stream_type']);
  140. /**
  141. * 输出结果过:
  142. * string(6) "MEMORY"
  143. */
  144. //获取资源
  145. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  146. $resource = $stream->getStreamResource();
  147. fseek($resource, 0, SEEK_SET);
  148. var_dump(stream_get_contents($resource));
  149. /**
  150. * 输出结果过:
  151. * string(10) "Easyswoole"
  152. */
  153. //将文件截断到给定的长度
  154. $stream = new \EasySwoole\Spl\SplStream('Easyswoole');
  155. $stream->truncate(4);
  156. var_dump($stream->__toString());
  157. /**
  158. * 输出结果过:
  159. * string(4) "Easy"
  160. */

ps: 资源和资源流是有区别的,这里说的资源也就是数据或是变量,资源流是一种文件流。