前端PHP入门-030-文件函数API

bool file_exists ( $指定文件名或者文件路径)

功能:文件是否存在。

bool is_readable ( $指定文件名或者文件路径)

功能:文件是否可读

bool is_writeable ( $指定文件名或者文件路径)

功能:文件是否可写

bool is_executable ( $指定文件名或者文件路径)

功能:文件是否可执行

bool is_file ( $指定文件名或者文件路径)

功能:是否是文件

bool is_dir ( $指定文件名或者文件路径)

功能:是否是目录

void clearstatcache ( void )

功能:清楚文件的状态缓存

文件操作的常量

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

我们来看看格式:

平台 分割符
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处理一下,如下:

  1. <?php
  2. $_current_file = str_replace(array(‘/‘, ‘\\‘), DIRECTORY_SEPARATOR, __FILE__);
  3. define(‘__CUR_FILE__‘, $_current_file);
  4. echo __CUR_FILE__;
  5. ?>

文件指针操作函数

rewind ( resource handle)

功能:指针回到开始处

fseek ( resource handle, int offset [, int from_where])

功能:文件指针向后移动指定字符

我们在之前的读取当中我们发现fread读取指定长度的数据。读取指定长度的内容,下次再读取的时候从原位置开始再接着向后读取。

如上图,我们可以想象:

  1. 文件刚打开的时候读取到的是红色的图标
  2. 文件假色从A读取到了C
  3. 下次打开的时候可再从C绿色箭头处开始读取。

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

abcdeefghijklk

opqrst

uvwxyz

12345678

我们可开始来实验一次。

  1. <?php
  2. $fp = fopen(‘output.txt‘, ‘r+‘);
  3. //读取10个字符
  4. echo fread($fp,10);
  5. //指针设置回到开始处
  6. rewind($handle);
  7. //再读取10次看看输出的是什么
  8. echo fread($fp,10);
  9. //文件指针向后移动10个字符
  10. echo fseek($fp,10);
  11. //再看看文件中输出的是什么
  12. echo fread($fp,10);
  13. fclose($handle);
  14. ?>

上面的例子,你会发现fseek指定多长就移动多少个字节。而rewind每次都是回到文件的开始处。

那如何移动到最末尾呢?我们可以统计字节数。在fseek的时候直接移到回后。

filesize 检测文件的大小

  1. <?php
  2. $filename = ‘demo.txt‘;
  3. echo $filename . ‘文件大小为: ‘ . filesize($filename) . ‘ bytes‘;
  4. ?>

其它操作文件的函数

其实还有一些其他操作文件的函数,读取文件

函数名 功能
file 把整个文件读入一个数组中
fgets 从文件指针中读取一行,读到最后返回false
fgetc 从文件指针中读取一个字符,读到最后返回false
ftruncate 将文件截断到给定的长度

我们通过一个实例来把上面几个函数都用到。

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

abcdeefghijklk

opqrst

uvwxyz

12345678

  1. <?php
  2. //以增加的r模式打开
  3. $fp = fopen(‘demo.txt‘,‘r+‘);
  4. //你分发现每次只读一个字符
  5. echo fgetc($fp);
  6. //我要全部读取可以,读取一次将结果赋值一次给$string
  7. while($string = fgetc($fp)){
  8. echo $string;
  9. }
  10. ?>

fgets每次打开一行:

  1. <?php
  2. //以增加的r模式打开
  3. $fp = fopen(‘demo.txt‘,‘r+‘);
  4. //你分发现每次只读一个字符
  5. echo fgets($fp);
  6. echo fgets($fp);
  7. echo fgets($fp);
  8. echo fgets($fp);
  9. ?>

上面的代码,你会发现每次读取一次打开一行。读取最后返回的是false。

我们接下来看文件截取函数:

  1. <?php
  2. //打开我们上面的demo.txt文件
  3. $file = fopen("demo.txt", "a+");
  4. //你可以数数20个字有多长,看看是不是达到效果了
  5. echo ftruncate($file,20);
  6. fclose($file);
  7. ?>

上例中我们发现,截取多长就能显示多长的内容。

文件的时间函数

函数 功能说明
filectime 文件创建时间
filemtime 文件修改时间
fileatime 文件上次访问时间
  1. <?php
  2. $filename = ‘demo.txt‘;
  3. if (file_exists($filename)) {
  4. echo "$filename文件的上次访问时间是: " . date("Y-m-d H:i:s", fileatime($filename));
  5. echo "$filename文件的创建时间是: " . date("Y-m-d H:i:s", filectime($filename));
  6. echo "$filename文件的修改时间是: " . date("Y-m-d H:i:s", filemtime($filename));
  7. }
  8. ?>


目录和文件夹怎么处理呢?

我们就来学习目录或者称为文件夹的处理相关函数。

处理文件夹的基本思想如下:

  1. 读取某个路径的时候判断是否是文件夹

    1. 是文件夹的话,打开指定文件夹,返回文件目录的资源变量
    2. 使用readdir读取一次目录中的文件,目录指针向后偏移一次
    3. 使用readdir读取到最后,没有可读的文件返回false
    4. 关闭文件目录

我们来学习一比常用函数:

函数名 功能
opendir 打开文件夹,返回操作资源
readdir 读取文件夹资源
is_dir 判断是否是文件夹
closedir 关闭文件夹操作资源
filetype 显示是文件夹还是文件,文件显示file,文件夹显示dir
  1. <?php
  2. //设置打开的目录是D盘
  3. $dir = "d:/";
  4. //判断是否是文件夹,是文件夹
  5. if (is_dir($dir)) {
  6. if ($dh = opendir($dir)) {
  7. //读取一次向后移动一次文件夹指针
  8. echo readdir($dh).‘<br />‘;
  9. echo readdir($dh).‘<br />‘;
  10. echo readdir($dh).‘<br />‘;
  11. echo readdir($dh).‘<br />‘;
  12. //读取到最后返回false
  13. //关闭文件夹资源
  14. closedir($dh);
  15. }
  16. }
  17. ?>

即然是读取一次向后移动一次,我们是不是可以

  1. <?php
  2. //设置打开的目录是D盘
  3. $dir = "d:/";
  4. //判断是否是文件夹,是文件夹
  5. if (is_dir($dir)) {
  6. if ($dh = opendir($dir)) {
  7. //读取到最后返回false,停止循环
  8. while (($file = readdir($dh)) !== false) {
  9. echo "文件名为: $file : 文件的类型是: " . filetype($dir . $file) . "<br />";
  10. }
  11. closedir($dh);
  12. }
  13. }
  14. ?>


我们经常会遇到处理文件路径的情况。

例如:

  1. 文件后缀需要取出来
  2. 路径需要取出名字不取目录
  3. 只需要取出路径名中的目录路径
  4. 或者把网址中的各个部份进行解析取得独立值
  5. 甚至是自己组成一个url出来

很多地方都需要用路径处理类的函数。

我们把常用的路径处理函数为大家做了标注,大家对着这个路径处理函数进行处理即可:

函数名 功能
pathinfo 返回文件的各个组成部份
basename 返回文件名
dirname 文件目录部份
parse_url 网址拆解成各部份
http_build_query 生成url 中的query字符串
http_build_url 生成一个url

pathinfo

array pathinfo ( string $路径)

功能:传入文件路径返回文件的各个组成部份

我们用具体的示例来用一下:

  1. <?php
  2. $path_parts = pathinfo(‘d:/www/index.inc.php‘);
  3. echo ‘文件目录名:‘.$path_parts[‘dirname‘]."<br />";
  4. echo ‘文件全名:‘.$path_parts[‘basename‘]."<br />";
  5. echo ‘文件扩展名:‘.$path_parts[‘extension‘]."<br />";
  6. echo ‘不包含扩展的文件名:‘.$path_parts[‘filename‘]."<br />";
  7. ?>

结果如下:

文件目录名:d:/www

文件全名:lib.inc.php

文件扩展名:php

不包含扩展的文件名:lib.inc

basename

string basename ( string 路径[,string" role="presentation" style="position: relative;">路径[,string路径[,stringsuffix ])

功能:传入路径返回文件名

第一个参数传入路径。

第二个参数,指定我文件名到了指定字符停止。

  1. <?php
  2. echo "1: ".basename("d:/www/index.d", ".d").PHP_EOL;
  3. echo "2: ".basename("d:/www/index.php").PHP_EOL;
  4. echo "3: ".basename("d:/www/passwd").PHP_EOL;
  5. ?>

执行结果如下

1: index

2: index.php

3: passwd

dirname

dirname(string $路径)

功能:返回文件路径的文件目录部份

  1. <?php
  2. dirname(__FILE__);
  3. ?>

结论:你可以执行看看是不是返回了文件的目录部份。

parse_url

mixed parse_url ( string $路径 )

功能:将网址拆解成各个部份

  1. <?php
  2. $url = ‘http://username:[email protected]:9090/path?arg=value#anchor‘;
  3. var_dump(parse_url($url));
  4. ?>

结果如下:

array(8) {

["scheme"]=> string(4) "http"

["host"]=> string(8) "hostname"

["port"]=> int(9090)

["user"]=> string(8) "username"

["pass"]=> string(8) "password"

["path"]=> string(5) "/path"

["query"]=> string(9) "arg=value"

["fragment"]=> string(6) "anchor"

}

http_build_query

string http_build_query ( mixed $需要处理的数据)

功能:生成url 中的query字符串

  1. <?php
  2. //定义一个关联数组
  3. $data = [
  4. ‘username‘=>‘wukong‘,
  5. ‘area‘=>‘huaguoshan‘
  6. ];
  7. //生成query内容
  8. echo http_build_query($data);
  9. ?>

结果如下:

username=wukong&area=huaguoshan

http_build_url()

功能: 生成一个url



注:

PHP_EOL 常量

在windows平台相当于 echo "\r\n";

在unix\linux平台相当于 echo "\n";

在mac平台相当于 echo "\r";

来自为知笔记(Wiz)

时间: 2024-10-13 19:40:21

前端PHP入门-030-文件函数API的相关文章

前端PHP入门-018-内置函数之文件包含函数

在实际开发中,常常需要把程序中的公用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可.这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利. 在PHP中, 有require.require_once.include.include- once四种方法包含一个文件. 函数 包含失败 特点 inlcude 返回一条警告 文件继续向下执行.通常用于动态包含 require 一个致命的错 代码就不会继续向下执行.通常包含极为重要的文件,整个代码甭想执行 include_once

前端PHP入门-015-递归函数-飘过

提要: 如果感觉吃力,web前端的各位同学,可以弃之. 递归函数,递归只是一个名字,而递归函数的规定: 函数体内调用函数自己 . 我们来计算 10!=10*9*8*7*6*5*4*3*2*1 web前段各位可以飘过 <?php //10的阶乘 function demo($a) { if($a>1) { $x=$a*demo($a-1); } else { $x=$a; } return $x; } echo demo(10); ?> 来自为知笔记(Wiz)

前端PHP入门-012-回调函数[慎入]

尽力而为,对于WEB前端和美工同学,比较难了!但是你们都学过JS的闭包等操作,那么这里也一定没有问题! 回调函数,可以配合匿名函数和变量函数实现更加优美.复杂的一种函数结构. 回调函数,就是在处理一个功能的时候,我让让这个功能自定义能力再强一些,我准许调用这个函数的时候,还可以传入一个函数配合.协助进行处理. 这是 变量函数[忘记赶快回看] 和 回调函数 结合的一个章节. 这块理解了,我想对JS也是一个提高! <?php function woziji($one,$two,$func){ //我

前端PHP入门-008-自定义函数

大家已经是有编程经验的WEB前端,那么对于函数已经很熟悉了,PHP当中定义函数跟你们学习的JavaScript一样 想想有哪些函数类型? 我们在实际开发过程当中需要有很多功能都需要反复使用到,而这些反复需要使用到的功能,我们能定义成 功能(函数) ,就尽可能定义成功能(函数).使用的时候, 吼一下 它的名字即可. 语法 那我们来学一下自定义函数的语法规定,语法规定如下: function 函数名([参数名1[=值1], 参数名2[=值2], 参数名n[=值n]]) { 函数中的功能体 [retu

前端PHP入门-019-内置函数之数学函数-很重要

查看帮助文档为主 函数名 描述 实例 输入 输出 abs() 求绝对值 $abs = abs(-4.2); //4.2 数字 绝对值数字 ceil() 进一法取整 echo ceil(9.999); // 10 浮点数 进一取整 floor() 舍去法取整 echo floor(9.999); // 9 浮点数 直接舍去小数部分 fmod() 浮点数取余 "x=5.7;" role="presentation" style="position: relat

前端PHP入门-010-内部函数

内部函数,是指在函数内部又声明了一个函数. 注意事项: 内部函数名,不能是已存在的函数名 假设在函数a里面定义了一个内部函数,不能调用两次函数a. <?php function foo() { echo '我是函数foo哟,调一下我才会执行定义函数bar的过程<br />'; function bar(){ echo '在foo函数内部有个函数叫bar函数<br />'; } } //现在还不能调用bar()函数,因为它还不存在 bar(); foo(); //现在可以调用b

前端PHP入门-009-匿名函数

想想JavaScript当中是否有这个概念? 所谓匿名,就是没有名字. 匿名函数,也就是没有函数名的函数. 匿名函数的第一种用法,直接把赋数赋值给变量,调用变量即为调用函数. 匿名函数的写法比较灵活. 1.变量函数式的匿名函数 <?php $greet = function($name){ echo $name.',你好'; }; $greet('明天'); $greet('胖先生'); ?> 函数体没有函数名,通过$greent 加上括号 来调用的,这就是匿名函数. 2.回调式的匿名函数 我

通过ajax前端后台交互/登录页和注册页前端后台交互详解/前端后台交互基础应用/几个后台函数的基础应用/php文件函数基础应用/php字符传函数基础应用/php数组函数基础应用

  前  言  PHP     学习了好久的PHP,今天做一个可以后台交互的登录页和注册页,没做什么判断,简单的了解一下. 具体的内容分析如下: ① PHP中的数据传输-->>由注册页传输给注册页后台-->>注册页后台经过转码保存实例化的文件 ② 在登录页输入账户密码,点击登录时,获得触发函数:获得由后台传输过来的true或者false---转换页面或者弹出输入错误.    登录页后台获取保存账户密码的实例化文件,通过转码,if判断之后传输给前台登录页TURE或者FALSE. 总共

C语言 文件操作API介绍

文件的基本概念 所谓“文件”是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名. 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等.文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内存中来.从不同的角度可对文件作不同的分类.从用户的角度看,文件可分为普通文件和设备文件两种. 普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集,可以是源文件.目标文件.可执行程序:也可以是一组待输入处理的原始数据,或者是一组输出的结果.