文件读取/写入操作

fopen()函数

用来打开一个文件,打开时需要指定打开模式

打开模式

模式 作用
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL
'x+' 创建并以读写方式打开,其他的行为和 'x' 一样。

写入函数

  • fwrite()

int fwrite ( resource $handle , string $string [, int $length ] )

  • fputs() : fwrite的别名

读取函数

  • fread() : 读取文件(可安全用于二进制文件)

string fread ( resource $handle , int $length )

  • fgets() : 从文件指针中读取一行

string fgets ( resource $handle [, int $length ] )

  • fgetc() : 从文件指针中读取一个字符

string fgetc ( resource $handle )

关闭文件函数

  • fclose()

不需要fopen()打开的函数

  • file_get_contents() : 将整个文件读入一个字符串

string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )

  • file_put_contents() : 将一个字符串写入文件 , 和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )

其他读取函数

  • file() : 把整个文件读入一个数组中

array file ( string $filename [, int $flags = 0 [, resource $context ]] )

  • readfile() : 读取文件并写入到输出缓冲。

int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )

访问远程文件

开启allow_url_fopen,HTTP协议连接只能使用只读,FTP协议可以使用只读或者只写

目录操作函数

名称相关

  • basename() : 返回路径中的文件名部分

string basename ( string $path [, string $suffix ] )

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

输出:

1) sudoers
2) passwd
3) etc
4) .
5)
  • dirname() : 返回路径中的目录部分

string dirname ( string $path )

<?php
echo "1) " . dirname("/etc/passwd") . PHP_EOL; // 1) /etc
echo "2) " . dirname("/etc/") . PHP_EOL; // 2) / (or \ on Windows)
echo "3) " . dirname("."); // 3) .
?>
  • pathinfo() : 返回一个关联数组包含有 path 的信息。返回关联数组还是字符串取决于 options。

mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )

<?php
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php'); echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // since PHP 5.2.0
?>

输出

/www/htdocs/inc
lib.inc.php
php
lib.inc

目录读取

  • opendir() : 打开一个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中。

resource opendir ( string $path [, resource $context ] )

  • readdir() : 返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。

string readdir ([ resource $dir_handle ] )

  • closedir()
  • rewinddir() : 将 dir_handle 指定的目录流重置到目录的开头。

void rewinddir ( resource $dir_handle )

目录删除

  • rmdir() : 尝试删除 dirname 所指定的目录。 该目录必须是空的,而且要有相应的权限。 失败时会产生一个 E_WARNING 级别的错误。

bool rmdir ( string $dirname [, resource $context ] )

目录创建

  • mkdir() : 尝试新建一个由 pathname 指定的目录。

bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )

文件大小

  • filesize()

目录大小

  • disk_free_space()
  • disk_total_space()

文件拷贝

  • copy()

bool copy ( string $source , string $dest [, resource $context ] )

删除文件

  • unlink() : 删除 filename。和 Unix C 的 unlink() 函数相似。 发生错误时会产生一个 E_WARNING 级别的错误。

bool unlink ( string $filename [, resource $context ] )

文件类型

  • filetype() : 返回文件的类型。 可能的值有 fifo,char,dir,block,link,file 和 unknown。

重命名文件或目录

  • rename()

bool rename ( string $oldname , string $newname [, resource $context ] )

文件截取

  • ftruncate()

bool ftruncate ( resource $handle , int $size )

文件属性

  • file_exists()
  • is_readable()
  • is_writeable()
  • is_executable()
  • filectime() : 取得文件的 inode 修改时间。 (状态改变时间change time)
  • fileatime() : 取得文件的上次访问时间(access time)
  • filemtime() : 取得文件修改时间(modify time)

文件锁

  • flock()

文件指针

  • ftell() : 返回由 handle 指定的文件指针的位置,也就是文件流中的偏移量。

int ftell ( resource $handle )

  • fseek() : 在文件指针中定位

int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] )

<?php

$fp = fopen('somefile.txt', 'r');

// 读取数据
$data = fgets($fp, 4096); // 将指针移动到文件开头
// 与rewind($fp);效果一样
fseek($fp, 0); ?>
  • rewind() : 将 handle 的文件位置指针设为文件流的开头。

示例

<?php
/**
* 遍历目录里面的文件
* 1 打开dir
* 2 排除掉. 和 ..的情况
* 3 如果是dir 则再对目录进行遍历,递归遍历
*/
function loopDir($dir)
{
$handle = opendir($dir);
while(false!==($file=readdir($handle))){//这里不能写成while($file=read($handle)),因为如果文件名为"0",也会被判断为false
if ($file == '.' || $file == '..') {
continue;
}
if (filetype($dir.'/'.$file)=='dir') {
loopDir($dir.'/'.$file);
} else {
p($dir.'/'.$file);
}
}
closedir($handle);
} loopDir('.');

PHP文件及目录考察点的更多相关文章

  1. [APUE]文件和目录(中)

    一.link.unlink.remove和rename 一个文件可以有多个目录项指向其i节点.使用link函数可以创建一个指向现存文件连接 #include <unistd.h> int ...

  2. [APUE]文件和目录(上)

    一.文件权限 1. 各种ID 我在读这一章时遇到了各种ID,根据名字完全不清楚什么意思,幸好看到了这篇文章,http://blog.csdn.net/ccjjnn19890720/article/de ...

  3. ls: 无法访问/usr/sbin/smartctl: 没有那个文件或目录

    环境:RHEL6.5 + Oracle 11.2.0.4 RAC 在安装RAC时,检查时缺少包 cvuqdisk-1.0.9-1,oracle提供脚本修复安装. 但在执行时报错: [root@orad ...

  4. 【Linux命令】文件和目录操作命令

    本文主要用于常用命令的备忘,具体用法可用man查看,或查询其他资料. cd:改变工作目录 ls:列出目录的内容 mkdir:创建一个目录 cat:连接并显示指定的一个和多个文件的有关信息 cp:将给出 ...

  5. linux下创建文件与目录时默认被赋予了什么样的权限?

    当我们创建一个新的文件或目录的时候,他的默认权限是什么? umask--指定当前使用者在创建文件或目录的时候默认的权限值 [root@iZ288fgkcpkZ default]# umask [roo ...

  6. linux 查找文件或目录

    find / -maxdepth 2 -name "vmware*"在根目录/ 2层深度下搜索以vmware打头的文件或者目录

  7. java创建文件和目录

    java创建文件和目录 2013-09-04 12:56 99933人阅读 评论(7) 收藏 举报  分类: JAVA基础(10)  版权声明:本文为博主原创文章,未经博主允许不得转载. 创建文件和目 ...

  8. Linux文件与目录管理

    .      代表此层目录 . .     代表上一层目录 -      代表前一个工作目录 ~     代表"目前用户身份"所在的中文件夹 ~account   代表accoun ...

  9. IOS管理文件和目录

    1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...

随机推荐

  1. Spring Cloud Sleuth 中id的使用

    Spring Cloud Sleuth采用的是Google的开源项目Dapper的专业术语. Span:基本工作单元,发送一个远程调度任务 就会产生一个Span,Span是一个64位ID唯一标识的,T ...

  2. YTU 2844: 改错题A-看电影

    2844: 改错题A-看电影 时间限制: 1 Sec  内存限制: 128 MB 提交: 69  解决: 47 题目描述 注:本题只需要提交标记为修改部分之间的代码,请按照C++方式提交. 小平家长为 ...

  3. I.MX6 wpa_cli 使用

    /*********************************************************************** * I.MX6 wpa_cli 使用 * 说明: * ...

  4. MD5 密码加密算法 系统等待

    MD5 密码加密算法 public static String md(String md, String pass) { MessageDigest m; String passok = " ...

  5. 使用VS进行打包程序解决生成两个文件的问题(压缩后只有一个exe)

    使用VS打包创建setup相信大家都挺熟的了,不熟的话网上也有很多,就不做介绍了,现在给大家写下怎么将生成的那些文件夹以及setup.exe和.msi 文件打包成一个exe 我们这里使用的是Winra ...

  6. Akka源码分析-Serialization

    今天我们来谈一下akka的序列化框架,其实序列化.反序列化是一个老生常谈的问题,那么我们为什么还要研究一下akka的序列化框架呢?不就是使用哪种序列化.反序列化方法的区别么?其实刚开始的时候我也是这么 ...

  7. ODBC数据管理器 SqlServer实时数据同步到MySql

    ---安装安装mysqlconnector http://www.mysql.com/products/connector/ /* 配置mysqlconnector ODBC数据管理器->系统D ...

  8. QB学堂济南游记

    七天很快就过去了,今天的测试意味着集训也将结束.回首七天来,与许多dalao同处一室,见识到了各种厉害的老师.厉害的算法.厉害的数据结构. 前两天jzh与yl老师讲课的时候还是全程在线,然而讲到数据结 ...

  9. iOS 应用打包 设备兼容性问题(Build Active Architecture Only)

    在把应用打包安装到iPod Touch上面时,设备提示不兼容,所以就有几种猜想: 1.CPU架构问题,因为我手里这个iPod Touch的CPU是A5,是32位的: 2.TARGETS里面相关的设置对 ...

  10. IE6,7bug大搜集

    断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决 ,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1 ...