前端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处理一下,如下:
<?php$_current_file = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, __FILE__);define('__CUR_FILE__', $_current_file);echo __CUR_FILE__;?>
文件指针操作函数
rewind ( resource handle)
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 检测文件的大小
<?php
$filename = 'demo.txt';
echo $filename . '文件大小为: ' . filesize($filename) . ' bytes';
?>
其它操作文件的函数
<?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);//我要全部读取可以,读取一次将结果赋值一次给$stringwhile($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));}?>
目录和文件夹怎么处理呢?
我们就来学习目录或者称为文件夹的处理相关函数。
处理文件夹的基本思想如下:
- 读取某个路径的时候判断是否是文件夹
- 是文件夹的话,打开指定文件夹,返回文件目录的资源变量
- 使用readdir读取一次目录中的文件,目录指针向后偏移一次
- 使用readdir读取到最后,没有可读的文件返回false
- 关闭文件目录
我们来学习一比常用函数:
| 函数名 | 功能 |
|---|---|
| opendir | 打开文件夹,返回操作资源 |
| readdir | 读取文件夹资源 |
| is_dir | 判断是否是文件夹 |
| closedir | 关闭文件夹操作资源 |
| filetype | 显示是文件夹还是文件,文件显示file,文件夹显示dir |
<?php//设置打开的目录是D盘$dir = "d:/";//判断是否是文件夹,是文件夹if (is_dir($dir)) {if ($dh = opendir($dir)) {//读取一次向后移动一次文件夹指针echo readdir($dh).'<br />';echo readdir($dh).'<br />';echo readdir($dh).'<br />';echo readdir($dh).'<br />';//读取到最后返回false//关闭文件夹资源closedir($dh);}}?>
即然是读取一次向后移动一次,我们是不是可以
<?php//设置打开的目录是D盘$dir = "d:/";//判断是否是文件夹,是文件夹if (is_dir($dir)) {if ($dh = opendir($dir)) {//读取到最后返回false,停止循环while (($file = readdir($dh)) !== false) {echo "文件名为: $file : 文件的类型是: " . filetype($dir . $file) . "<br />";}closedir($dh);}}?>
我们经常会遇到处理文件路径的情况。
例如:
- 文件后缀需要取出来
- 路径需要取出名字不取目录
- 只需要取出路径名中的目录路径
- 或者把网址中的各个部份进行解析取得独立值
- 甚至是自己组成一个url出来
很多地方都需要用路径处理类的函数。
我们把常用的路径处理函数为大家做了标注,大家对着这个路径处理函数进行处理即可:
| 函数名 | 功能 |
|---|---|
| pathinfo | 返回文件的各个组成部份 |
| basename | 返回文件名 |
| dirname | 文件目录部份 |
| parse_url | 网址拆解成各部份 |
| http_build_query | 生成url 中的query字符串 |
| http_build_url | 生成一个url |
pathinfo
array pathinfo ( string $路径)
功能:传入文件路径返回文件的各个组成部份
array pathinfo ( string $路径)
功能:传入文件路径返回文件的各个组成部份
我们用具体的示例来用一下:
<?php$path_parts = pathinfo('d:/www/index.inc.php');echo '文件目录名:'.$path_parts['dirname']."<br />";echo '文件全名:'.$path_parts['basename']."<br />";echo '文件扩展名:'.$path_parts['extension']."<br />";echo '不包含扩展的文件名:'.$path_parts['filename']."<br />";?>
结果如下:
文件目录名:d:/www
文件全名:lib.inc.php
文件扩展名:php
不包含扩展的文件名:lib.inc
basename
string basename ( string 路径[,string" role="presentation" style="position: relative;">路径[,string路径[,stringsuffix ])
功能:传入路径返回文件名
第一个参数传入路径。
第二个参数,指定我文件名到了指定字符停止。
<?php
echo "1: ".basename("d:/www/index.d", ".d").PHP_EOL;
echo "2: ".basename("d:/www/index.php").PHP_EOL;
echo "3: ".basename("d:/www/passwd").PHP_EOL;
?>
string basename ( string 路径[,string" role="presentation" style="position: relative;">路径[,string路径[,stringsuffix ])
功能:传入路径返回文件名
第一个参数传入路径。
第二个参数,指定我文件名到了指定字符停止。
<?phpecho "1: ".basename("d:/www/index.d", ".d").PHP_EOL;echo "2: ".basename("d:/www/index.php").PHP_EOL;echo "3: ".basename("d:/www/passwd").PHP_EOL;?>
执行结果如下
1: index
2: index.php
3: passwd
dirname
dirname(string $路径)
功能:返回文件路径的文件目录部份
<?phpdirname(__FILE__);?>
结论:你可以执行看看是不是返回了文件的目录部份。
parse_url
mixed parse_url ( string $路径 )
功能:将网址拆解成各个部份
<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url));
?>
mixed parse_url ( string $路径 )
功能:将网址拆解成各个部份
<?php$url = 'http://username:password@hostname:9090/path?arg=value#anchor';var_dump(parse_url($url));?>
结果如下:
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字符串
<?php
//定义一个关联数组
$data = [
'username'=>'wukong',
'area'=>'huaguoshan'
];
//生成query内容
echo http_build_query($data);
?>
string http_build_query ( mixed $需要处理的数据)
功能:生成url 中的query字符串
<?php//定义一个关联数组$data = ['username'=>'wukong','area'=>'huaguoshan'];//生成query内容echo http_build_query($data);?>
结果如下:
username=wukong&area=huaguoshan
http_build_url()
功能: 生成一个url
注:
PHP_EOL 常量
在windows平台相当于 echo "\r\n";
在unix\linux平台相当于 echo "\n";
在mac平台相当于 echo "\r";
前端PHP入门-030-文件函数API的更多相关文章
- 前端PHP入门-018-内置函数之文件包含函数
在实际开发中,常常需要把程序中的公用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可.这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利. 在PHP中, 有require.r ...
- 前端PHP入门-015-递归函数-飘过
提要: 如果感觉吃力,web前端的各位同学,可以弃之. 递归函数,递归只是一个名字,而递归函数的规定: 函数体内调用函数自己 . 我们来计算 10!=10*9*8*7*6*5*4*3*2*1 web前 ...
- 前端PHP入门-012-回调函数[慎入]
尽力而为,对于WEB前端和美工同学,比较难了!但是你们都学过JS的闭包等操作,那么这里也一定没有问题! 回调函数,可以配合匿名函数和变量函数实现更加优美.复杂的一种函数结构. 回调函数,就是在处理一个 ...
- 前端PHP入门-008-自定义函数
大家已经是有编程经验的WEB前端,那么对于函数已经很熟悉了,PHP当中定义函数跟你们学习的JavaScript一样 想想有哪些函数类型? 我们在实际开发过程当中需要有很多功能都需要反复使用到,而这些反 ...
- 前端PHP入门-019-内置函数之数学函数-很重要
查看帮助文档为主 函数名 描述 实例 输入 输出 abs() 求绝对值 $abs = abs(-4.2); //4.2 数字 绝对值数字 ceil() 进一法取整 echo ceil(9.999); ...
- 前端PHP入门-010-内部函数
内部函数,是指在函数内部又声明了一个函数. 注意事项: 内部函数名,不能是已存在的函数名 假设在函数a里面定义了一个内部函数,不能调用两次函数a. <?php function foo() { ...
- 前端PHP入门-009-匿名函数
想想JavaScript当中是否有这个概念? 所谓匿名,就是没有名字. 匿名函数,也就是没有函数名的函数. 匿名函数的第一种用法,直接把赋数赋值给变量,调用变量即为调用函数. 匿名函数的写法比较灵活. ...
- web前端对上传的文件进行类型大小判断的js自定义函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 通过ajax前端后台交互/登录页和注册页前端后台交互详解/前端后台交互基础应用/几个后台函数的基础应用/php文件函数基础应用/php字符传函数基础应用/php数组函数基础应用
前 言 PHP 学习了好久的PHP,今天做一个可以后台交互的登录页和注册页,没做什么判断,简单的了解一下. 具体的内容分析如下: ① PHP中的数据传输-->>由注册页传输 ...
随机推荐
- AngularJS - 路由 routing 基础示例
AngularJS 路由 routing 能够从页面的一个视图跳转到另外一个视图,对单页面应用来讲是至关重要的.当应用变得越来越复杂时,我们需要一个合理的方式来管理用户在使用过程中看到的界面.Angu ...
- 5 种使用 Python 代码轻松实现数据可视化的方法
数据可视化是数据科学家工作中的重要组成部分.在项目的早期阶段,你通常会进行探索性数据分析(Exploratory Data Analysis,EDA)以获取对数据的一些理解.创建可视化方法确实有助于使 ...
- CQOI2018 游记 再见OI,既是反思,也是祝福
哎,怎么说呢? 时运不齐,命途多舛? 从头开始说吧. 今年的NOIP大家考的都不尽人意,每个人都有或多或少的失误,全部都几十分几十分地丢.最后大家剩下的觉得可能冲击一下省队的人一共只有7个. 伙伴们变 ...
- [转]有道云笔记markdown
作为半个文字工作者,一天当中,一半时间用在遣词造句,一半时间则在死磕排版.当听说“前所未有的极简语法”Markdown,不仅能简化排版.大大提高书写效率,而且上手零门槛.好奇宝宝怎么忍得住一颗蠢蠢欲动 ...
- 查看dll依赖项
win7 系统: 开始-->所有程序->vs2012文件夹->vs tools->对应的命令提示符 输入命令: dumpbin /dependents 你的文件(可以是exe, ...
- 【dp】New Keyboard
http://codeforces.com/gym/101397 B dp[i][j][k]: i为前一个行动的状态,0-switch.1-type,j为当前状态layout的编号,k 是已键入的字符 ...
- 周总结<4>
经过了一周的学习,我们在html以及C语言方面又有的新的知识点的学习. html 自习表格,函数等 C语言 哈弗曼编码 Html案例: 一. <!DOCTYPE html PUBLIC &quo ...
- Redis 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边),一个列表最多可以包含2^32-1个元素(4294967295,每个列表超过40亿个元素). ...
- lintcode-473-单词的添加与查找
473-单词的添加与查找 设计一个包含下面两个操作的数据结构:addWord(word), search(word) addWord(word)会在数据结构中添加一个单词.而search(word)则 ...
- C++ Primer Plus学习:第四章
C++入门第四章:复合类型 1 数组 数组(array)是一种数据格式,能够存储多个同类型的值. 使用数组前,首先要声明.声明包括三个方面: 存储每个元素中值的类型 数组名 数组中的元素个数 声明的通 ...