php 文件常用函数和常量

文件操作的常量

下面这一个常量是最常用的。是文件目录的分割符的常量。

我们来看看格式:

平台分割符
windows\
类unix/

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读取指定长度的数据。读取指定长度的内容,下次再读取的时候从原位置开始再接着向后读取。

document_2015-09-08_55eecf3c2a7e0.png

如上图,我们可以想象:

    1.文件刚打开的时候读取到的是红色的图标

    2.文件假色从A读取到了C

    3.下次打开的时候可再从C绿色箭头处开始读取。

我们在demo.txt文件中写入一批文件:

abcdeefghijklk
opqrst
uvwxyz
12345678

我们可开始来实验一次。

<?php
$fp = fopen('demo2.txt', 'r+');
//读取10个字符
echo fread($fp,10);

//指针设置回到开始处
rewind($fp);
//再读取10次看看输出的是什么
echo '<br>';
echo fread($fp,10);
echo '<br>';
//文件指针向后移动10个字符
echo fseek($fp,10);
echo '<br>';
//再看看文件中输出的是什么
echo fread($fp,10);
echo '<br>';
fclose($fp);
?>

上面的例子,你会发现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));}
?>


继续学习
||
<?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)); } ?>
提交重置代码
章节
笔记
提问
课件
反馈
捐赠

php入门教程之一周学会PHP

高并发千万级数据库系统解决方案
  • 推荐课程
  • 评论
  • 问答
  • 笔记
  • 课件下载

香蕉你个不呐呐

我不得不说,你这写的是真乱 虽然是免费的,但是 质量真的不是很好,

5年前    添加回复 1

phpcn_u70297

好乱啊,作为一个文科生,来学这个,我觉得有点为难自己了。

6年前    添加回复 1

大学生de小铺子

windows 的路径格式为 d:\xxx\xxx 注意:windows支持 d:/xxx/xxx linux 的路径格式为 /home/xxx/xxx 注意:如果\home\xxx\xxx 在linux上是错误的 所以当你开启转义之类的话,转义字符 \ 用一起的话 d:\xxx\xxx 是一样的。判断时候有两个 \ 有的话 再转成一个\ 再把 \ 替换成 /当路径分割,这样在linux上或者

6年前    添加回复 0

华东

echo fseek($fp,10);为啥是0

6年前    添加回复 0

luoshui

demo2.txt什么鬼!能不能认真点。小编!

6年前    添加回复 0

echo fseek($fp,10);输出怎么变成0了

[最新 卿立平 的回答] 可以查一下php7手册,fseek函数是指针向后移动指定字节的函数。但是这个指针移动是有一点的要求的,有三种结果:1、是在设定位置(文件的开头)向后加要指定的字节;2、是在设定位置(文件的开头)向文件尾加要指定的字节 ,3、设定的位置(文件指针的定前位置)等于要增加的字节数。此函数的返回值是:增加成功则返回 0;否则返回 -1。而此时我们用fseek($fp,10) ,此时的理解应该是指针回到文件开头,然后再向后移动了10个字节。我们来测试一下,我有一个文件叫“mylove.txt”,内容如下:“我们要牢记人民对美好生活的向往就是我们的奋斗目标,坚持以人民为中心的发展思想,努力抓好保障和改善民生各项工作,不断增强人民的获得感、幸福感、安全感,不断推进全体人民共同富裕。”2017年10月25日,习近平总书记在十九届中共中央政治局常委同中外记者见面时的讲话,掷地有声。”执行程序: 程序输出的结果是:我们要牢记我们要牢记0生活的向往结合这个案例,应该就可以更好的理解fseek ()函数了。最好还是查看一下手册理解一下。

时间:6年前

课件暂不提供下载,工作人员正在整理中,后期请多关注该课程~