8.6 文件常用函数和常量
文件操作的常量
下面这一个常量是最常用的。是文件目录的分割符的常量。
我们来看看格式:
平台 | 分割符 |
---|---|
windows | \ |
linux | / |
windows 的路径格式为 d:\xxx\xxx 注意:windows 支持 d:/xxx/xxx
linux 的路径格式为 /home/xxx/xxx 注意:如果\home\xxx\xxx 在 linux 上是错误的
所以当你开启转义之类的话,转义字符 \ 用一起的话 d:\xxx\xxx 是一样的。判断时候有两个 \ 有的话 再转成一个\ 再把 \ 替换成 /当路径分割,这样在 linux 上或者 windos 上的路径就能保持统一了。
我们会使用到一个常量:
DIRECTORY_SEPARATOR
我们来写一个小的实例,定义当前文件所在的路径:
由于 FILE 是 PHP 的预定义常量,所以没办法改变,如果需要让 FILE 也自适应操作系统。
那么就是不要用 FILE ,可以用自定义的常量,并且把 FILE 处理一下,如下:
<?php
$_current_file = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, __FILE__);
define('__CUR_FILE__', $_current_file);
echo __CUR_FILE__;
?>
文件指针操作函数
rewind ( resource handle)
功能:指针回到开始处
fseek ( resource handle, int offset [, int from_where])
功能:文件指针向后移动指定字符
我们在之前的读取当中我们发现 fread 读取指定长度的数据。读取指定长度的内容,下次再读取的时候从原位置开始再接着向后读取。
如上图,我们可以想象:
- 文件刚打开的时候读取到的是红色的图标
- 文件假设从 A 读取到了 C
- 下次打开的时候可再从 C 绿色箭头处开始读取。
我们在 demo.txt 文件中写入一批文件:
abcdeefghijklk
opqrst
uvwxyz
12345678
我们可开始来实验一次。
<?php
$fp = fopen('output.txt', 'r+');
//读取 10 个字符
echo fread($fp,10);
//指针设置回到开始处
rewind($handle);
//再读取 10 次看看输出的是什么
echo fread($fp,10);
//文件指针向后移动 10 个字符
echo fseek($fp,10);
//再看看文件中输出的是什么
echo fread($fp,10);
fclose($handle);
?>
上面的例子,你会发现 fseek 指定多长就移动多少个字节。而 rewind 每次都是回到文件的开始处。
那如何移动到最末尾呢?我们可以统计字节数。在 fseek 的时候直接移到回后。
下面我们来讲 filesize 统计字节数。
filesize 检测文件的大小
<?php
$filename = 'demo.txt';
echo $filename . '文件大小为: ' . filesize($filename) . ' bytes';
?>
其它操作文件的函数
其实还有一些其他操作文件的函数,读取文件
函数名 | 功能 |
---|---|
file | 把整个文件读入一个数组中 |
fgets | 从文件指针中读取一行,读到最后返回 false |
fgetc | 从文件指针中读取一个字符,读到最后返回 false |
ftruncate | 将文件截断到给定的长度 |
我们通过一个实例来把上面几个函数都用到。
我们在 demo.txt 文件中写入一批文件:
abcdeefghijklk
opqrst
uvwxyz
12345678
<?php
//以增加的 r 模式打开
$fp = fopen('demo.txt','r+');
//你分发现每次只读一个字符
echo fgetc($fp);
//我要全部读取可以,读取一次将结果赋值一次给$string
while($string = fgetc($fp)){
echo $string;
}
?>
fgets 每次打开一行:
<?php
//以增加的 r 模式打开
$fp = fopen('demo.txt','r+');
//你分发现每次只读一个字符
echo fgets($fp);
echo fgets($fp);
echo fgets($fp);
echo fgets($fp);
?>
上面的代码,你会发现每次读取一次打开一行。读取最后返回的是 false。
我们接下来看文件截取函数:
<?php
//打开我们上面的 demo.txt 文件
$file = fopen("demo.txt", "a+");
//你可以数数 20 个字有多长,看看是不是达到效果了
echo ftruncate($file,20);
fclose($file);
?>
上例中我们发现,截取多长就能显示多长的内容。
文件的时间函数
函数 | 功能说明 |
---|---|
filectime | 文件创建时间 |
filemtime | 文件修改时间 |
fileatime | 文件上次访问时间 |
<?php
$filename = 'demo.txt';
if (file_exists($filename)) {
echo "$filename 文件的上次访问时间是: " . date("Y-m-d H:i:s", fileatime($filename));
echo "$filename 文件的创建时间是: " . date("Y-m-d H:i:s", filectime($filename));
echo "$filename 文件的修改时间是: " . date("Y-m-d H:i:s", filemtime($filename));
}
?>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论