前言
本系列文章主要是根据实战视频《360大牛:全面解读PHP面试》学习过程中记录的学习笔记,期间也会加入查找资料和平时学习中学习到的知识。
fopen()函数
用来打开一个文件,打开时需要指定打开模式。
打开模式:
r/r+ r以只读模式打开,并把文件指针指向文件开头。r+以读写模式打开,并把文件指针指向文件开头。
w/w+ w以只写模式打开,并把文件指针指向文件开头,同时把文件内容清空。w+以读写模式打开,并把文件指针指向文件开头,同时把文件内容清空。w/w+模式打开时,若文件不存在,会创建文件。
a/a+ a以追加写入方式打开,把文件指针指向文件末尾,当文件不存在时会创建文件。以追加读写方式打开,把文件指针指向文件末尾,当文件不存在时会创建文件。
x/x+ x以写入模式打开,并且把文件指针指向文件开头,若文件存在会发出一个warning的错误,同时fopen()返回false。文件不存在时会创建文件。x+创建且以读写模式打开。
b 打开二进制文件,配合上面8种模式打开
t 在windows下打开文件时,把 \n 转换为 \r\n ,配合上面8种模式打开
写入函数
fwrite() 写入文件(可安全用于二进制文件)
用法:int fwrite ( resource $handle , string $string [, int $length ] )
描述:把 string 的内容写入 文件指针 handle 处。fwrite() 返回写入的字符数,出现错误时则返回 FALSE 。
fputs() fwrite() 的别名
读取函数
fread() 读取文件(可安全用于二进制文件)
用法:string fread ( resource $handle , int $length )
描述:从文件指针 handle 读取最多 length 个字节。返回所读取的字符串, 或者在失败时返回 FALSE。 该函数在遇上以下几种情况时停止读取文件:
①读取了 length 个字节
②到达了文件末尾(EOF)
fgets() 从文件指针中读取一行
用法:string fgets ( resource $handle [, int $length ] )
描述:从指针 handle 指向的文件中读取了 length - 1 字节后返回字符串。 从php版本4.3起,如果fgets不写length参数,默认是读到行结束符为止。如果文件指针中没有更多的数据了则返回 FALSE。错误发生时返回 FALSE。
fgetc() 从文件指针中读取字符
用法:string fgetc ( resource $handle )
描述:从文件句柄中获取一个字符。返回一个包含有一个字符的字符串,该字符从 handle 指向的文件中得到。 碰到 EOF 则返回 FALSE。
关闭文件函数
fclose() 关闭一个已打开的文件指针
用法:bool fclose ( resource $handle )
描述:成功时返回 TRUE, 或者在失败时返回 FALSE。
不需要fopen()打开的函数
file_get_contents() 将整个文件读入一个字符串
用法:string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )
描述:file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为 maxlen 的内容。如果失败,file_get_contents() 将返回 FALSE。
file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。
例子:
<?php
$ctx = stream_context_create(
array(
'http' => array(
'method' => 'get',
'timeout' => 5,
)
)
);
$result = file_get_contents($url, false, $ctx);
file_put_contents() 将一个字符串写入文件
用法: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 ]] )
描述:读取文件并写入到输出缓冲。
use_include_path:想要在 include_path 中搜索文件,可使用这个可选的第二个参数,设为 TRUE。
返回从文件中读入的字节数。如果出错返回 FALSE 并且除非是以 @readfile() 形式调用,否则会显示错误信息。
访问远程文件
开启 allow_url_fopen,HTTP 协议连接只能使用只读, FTP 协议可以使用只读或者只写。
目录操作函数
名称相关:
basename() 返回路径中的文件名
用法:yongstring basename ( string $path [, string $suffix ] )
描述:给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。
path 一个路径。在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。
例子:
<?php
echo "1) ".basename("/etc/sudoers.d", ".d").PHP_EOL; // 1) sudoers
echo "2) ".basename("/etc/sudoers.php").PHP_EOL; // 2) sudoers.php
echo "3) ".basename("/etc/passwd").PHP_EOL; // 3) passwd
echo "4) ".basename("/etc/").PHP_EOL; // 4) etc
echo "5) ".basename(".").PHP_EOL; // 5) .
echo "6) ".basename("/"); // 6)
dirname() 返回路径中的目录部分
用法:string dirname ( string $path )
用法:给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名
path 一个路径。在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。
返回 path 的父目录。 如果在 path 中没有斜线,则返回一个点('.'),表示当前目录。否则返回的是把 path 中结尾的 /component(最后一个斜线以及后面部分)去掉之后的字符串。
例子:
<?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() 返回文件路径的信息
用法:mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )
描述:pathinfo() 返回一个关联数组包含有 path 的信息。返回关联数组还是字符串取决于 options。如果指定了,将会返回指定元素;它们包括:PATHINFO_DIRNAME,PATHINFO_BASENAME 和 PATHINFO_EXTENSION 或 PATHINFO_FILENAME。如果没有指定 options 默认是返回全部的单元。
例子:
<?php
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
echo $path_parts['dirname'], "\n"; // /www/htdocs/inc
echo $path_parts['basename'], "\n"; // lib.inc.php
echo $path_parts['extension'], "\n"; // php
echo $path_parts['filename'], "\n"; // lib.inc
目录读取
opendir() 打开目录句柄
用法:resource opendir ( string $path [, resource $context ] )
描述:打开一个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中。如果成功则返回目录句柄的 resource,失败则返回 FALSE。如果 path 不是一个合法的目录或者因为权限限制或文件系统错误而不能打开目录,opendir() 返回 FALSE 并产生一个 E_WARNING 级别的 PHP 错误信息。可以在 opendir() 前面加上“@”符号来抑制错误信息的输出。
readdir() 从目录句柄中读取条目
用法:string readdir ([ resource $dir_handle ] )
描述:返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。
成功则返回文件名 或者在失败时返回 FALSE。
closedir() 关闭目录句柄
用法:void closedir ([ resource $dir_handle ] )
描述:关闭由 dir_handle 指定的目录流。
rewinddir() 倒回目录句柄
用法:void rewinddir ( resource $dir_handle )
描述:将 dir_handle 指定的目录流重置到目录的开头。
目录删除
rmdir()
描述:删除目录时,需保证目录为空,而且要有相应的权限。否则无法删除。 失败时会产生一个 E_WARNING
级别的错误。
目录创建
mkdir() 新建目录
用法:bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )
描述:尝试新建一个由 pathname 指定的目录。
例子:
<?php
mkdir("/path/to/my/dir", 0700);
其他函数
文件大小
filesize() 取得文件大小
描述:返回文件大小的字节数,如果出错返回 FALSE 并生成一条 E_WARNING 级的错误。
磁盘大小
disk_free_space() 返回目录中的可用空间
用法:float disk_free_space ( string $directory )
描述:给出一个包含有一个目录的字符串,本函数将根据相应的文件系统或磁盘分区返回可用的字节数。
disk_total_space() 返回一个目录的磁盘总大小
用法:float disk_total_space ( string $directory )
描述:给出一个包含有一个目录的字符串,本函数将根据相应的文件系统或磁盘分区返回所有的字节数。本函数返回的是该目录所在的磁盘分区的总大小,因此在给出同一个磁盘分区的不同目录作为参数所得到的结果完全相同。
例子:
<?php
$ds = disk_total_space("/");
文件拷贝
copy() 拷贝文件
用法:bool copy ( string $source , string $dest [, resource $context ] )
描述将文件从 source 拷贝到 dest。如果目标文件已存在,将会被覆盖。
删除文件
unlink() 删除文件
用法:bool unlink ( string $filename [, resource $context ] )
文件类型
filetype() 取得文件类型
用法:string filetype ( string $filename )
描述:返回文件的类型。 可能的值有 fifo,char,dir,block,link,file 和 unknown。
重命名文件或者目录
rename() 重命名一个文件或目录
用法:bool rename ( string $oldname , string $newname [, resource $context ] )
描述:尝试把 oldname 重命名为 newname。
例子:
<?php
rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
文件截取
ftruncate() 将文件截断到给定的长度
用法:bool ftruncate ( resource $handle , int $size )
描述:接受文件指针 handle 作为参数,并将文件大小截取为 size。
例子:
<?php
$filename = 'lorem_ipsum.txt';
$handle = fopen($filename, 'r+');
ftruncate($handle, rand(1, filesize($filename)));
rewind($handle);
echo fread($handle, filesize($filename));
fclose($handle);
文件属性
file_exists() 检查文件或目录是否存在
用法:bool file_exists ( string $filename )
is_readable() 判断给定文件名是否可读
用法:bool is_readable ( string $filename )
描述:判断给定文件名是否存在并且可读。
例子:
<?php
$filename = 'test.txt';
if (is_readable($filename)) {
echo 'The file is readable';
} else {
echo 'The file is not readable';
}
is_writable() 判断给定的文件名是否可写
用法:bool is_writable ( string $filename )
描述:如果文件存在并且可写则返回 TRUE。
is_executable() 判断给定文件名是否可执行
用法:bool is_executable ( string $filename )
filectime() 取得文件的 inode 创建时间
用法:int filectime ( string $filename )
fileatime() 取得文件的上次访问时间
用法:int fileatime ( string $filename )
filemtime() 取得文件修改时间
用法:int filemtime ( string $filename )
描述:本函数返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间。
文件锁
flock() 轻便的咨询文件锁定
用法:bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
描述:operation 可以是以下值之一:
LOCK_SH取得共享锁定(读取的程序)。
LOCK_EX 取得独占锁定(写入的程序。
LOCK_UN 释放锁定(无论共享或独占)。
如果不希望 flock() 在锁定时堵塞,则是 LOCK_NB(Windows 上还不支持)。
例子:
<?php
$fp = fopen("/tmp/lock.txt", "r+");
if (flock($fp, LOCK_EX)) { // 进行排它型锁定
ftruncate($fp, 0); // truncate file
fwrite($fp, "Write something here\n");
fflush($fp); // flush output before releasing the lock
flock($fp, LOCK_UN); // 释放锁定
} else {
echo "Couldn't get the lock!";
}
fclose($fp);
文件指针
ftell() 返回文件指针读/写的位置
用法:int ftell ( resource $handle )
描述:返回由 handle 指定的文件指针的位置,也就是文件流中的偏移量。
例子:
<?php
$fp = fopen("/etc/passwd", "r");
$data = fgets($fp, 12);
// where are we ?
echo ftell($fp); // 11
fclose($fp);
fseek() 在文件指针中定位
用法:int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] )
描述:在与 handle 关联的文件中设定文件指针位置。 新位置从文件头开始以字节数度量,是以 whence 指定的位置加上 offset。要移动到文件尾之前的位置,需要给 offset 传递一个负值,并设置 whence 为 SEEK_END。whence 的值包括:SEEK_SET - 设定位置等于 offset 字节。SEEK_CUR - 设定位置为当前位置加上 offset。SEEK_END - 设定位置为文件尾加上 offset。
例子:
<?php
$fp = fopen('somefile.txt', 'r');
// read some data
$data = fgets($fp, 4096);
// move back to the beginning of the file
// same as rewind($fp);
fseek($fp, 0);
rewind() 倒回文件指针的位置
用法:bool rewind ( resource $handle )
描述:将 handle 的文件位置指针设为文件流的开头。