前面的话

  在程序运行时,程序本身和数据一般都存在内存中,当程序运行结束后,存放在内存中的数据被释放。如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就需要把数据存储在文件或数据库。一般地,小型数据存储在文件中,海量数据存储在数据库中。本文主要介绍php中目录和文件的基本操作

文件类型

  文件一般指存储在外部介质上具有名字(文件名)的一组相关数据集合。用文件可长期保存数据,并实现数据共享

  PHP是以UNIX的文件系统为模型的。因此在Windows系统中我们只能获得”file”、”dir”或者“unknown”三种文件类型。而在UNIX系统中,我们可以获得block、char、dir、fifo、file、link和unknown七种类型

  可以使用函数filetype()获取文件的具体类型,可能的值有fifo,char,dir,block,link,file 和 unknown

  1. string filetype ( string filename )

  如果出错则返回 FALSE。如果调用失败或者文件类型未知的话 filetype() 还会产生一个 E_NOTICE 消息

  在服务器中新建一个目录test,并在目录中新建一个文件a.txt

  1. <?php
  2. echo filetype('test/a.txt'); // file
  3. echo filetype('test/'); // dir
  4. echo filetype('test/b.txt'); // Warning: filetype(): Lstat failed for test/b.txt
  5. ?>

  在这7种文件类型中,window系统常用的是'file'和'dir'这两种,它们配套的类型检测函数分别是is_dir( )和is_file( )

is_dir( )

  判断给定文件名是否是一个目录。如果文件名存在并且是一个目录则返回 true,否则返回 false 

  1. bool is_dir(_name)

is_file( )

  判断给定文件名是否为一个正常的文件,如果文件存在且为正常的文件则返回 true

  1. bool is_file(_name)
  1. <?php
  2. var_dump (is_file('test/a.txt')); //boolean true
  3. var_dump (is_dir('test/')); //boolean true
  4. ?>

文件属性

  一般地,在文件或目录右键菜单中,选择属性,即可查看文件的属性

  下表中列出了php中关于文件属性的常用函数

  1. <?php
  2. var_dump (file_exists('test/a.txt')); //boolean true
  3. var_dump (filesize('test/a.txt')); // int 0
  4. var_dump (is_readable('test/a.txt')); //boolean true
  5. var_dump (is_writeable('test/a.txt')); //boolean true
  6. var_dump (is_executable('test/a.txt')); //boolean false
  7. var_dump (date("Y-m-d H:i:s",(filectime('test/a.txt'))));//string '2016-11-22 06:47:54' (length=19)
  8. var_dump (date("Y-m-d H:i:s",(filemtime('test/a.txt'))));//string '2016-11-22 06:47:54' (length=19)
  9. var_dump (date("Y-m-d H:i:s",(fileatime('test/a.txt'))));//string '2016-11-22 06:47:54' (length=19)
  10. ?>

目录路径

  windows下的目录路径使用是正斜杠(\),而unix下的目录路径使用是反斜杠(/)

  1. $unixPath="/var/www/html/index.php";
  2. //在UNIX系统中的绝对路径,必须使用"/"分隔
  3. $winPath="C:\\Appserv\\www\\index.php";
  4. //在Windows系统的绝对路径,默认使用"\"分隔
  5. $winPath2="C:/Appserv/www/index.php";
  6. //在Windows系统中也可使用“/”分隔

  因为在Windows系统中也可使用(/)分隔。所以,在PHP中,不论是什么操作系统,全部都使用反斜杠(/)代表路径分隔符号

  在PHP中,还提供了一个常量DIRECTORY_SEPARATOR,以此来代表目录分隔符,但写起来较麻烦

  1. <?php
  2. echo "c:".DIRECTORY_SEPARATOR."a".DIRECTORY_SEPARATOR."b".DIRECTORY_SEPARATOR."c"; //c:\a\b\c
  3. ?>

  在windows下多个路径的分隔符使用分号(;)分隔,而unix下使用冒号(:)分隔

  在PHP中,提供了一个常量PATH_SEPARATOR,用来在跨平台的情况下,表示多个路径之间的分隔符

  1. <?php
  2. echo "aaa/ccc/ddd".PATH_SEPARATOR."/www/yyyy";//aaa/ccc/ddd;/www/yyyy
  3. ?>

换行 

  在window下,换行是\r\n,而在unix下,换行是\n。通常在写程序中,换行就以unix为准,写作\n

  同样地,PHP提供了一个常量PHP_EOL,用来在跨平台的情况下,表示换行

.和..

  在PHP中,.表示当前目录,..表示上一级目录

  1. <?php
  2. var_dump (file_exists('test/a.txt'));//boolean true
  3. var_dump (file_exists('./test/a.txt'));//boolean true
  4. var_dump (file_exists('../www/test/a.txt'));//boolean true
  5. ?>

根路径

  有两种根路径需要进行区分,一种是客户端根路径,一种是服务器根路径

  以我自己在d盘安装的wamp为例,客户端根路径指'd:\wamp\www\',而服务器根路径为为'd:\'

  1. <?php
  2. echo '<img src="/a.jpg">';//客户端根路径,相当于d:\wamp\www\a.jpg
  3. mkdir('/hello');//服务器根路径,相当于d:\hello
  4. ?>

路径解析函数

【basename()】

  basename()函数用于返回路径中的文件名部分

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

【dirname()】

  dirname()函数用于返回路径中的目录部分

  1. <?php
  2. echo "1) " . dirname("/etc/passwd") . PHP_EOL; // 1) /etc
  3. echo "2) " . dirname("/etc/") . PHP_EOL; // 2) \
  4. echo "3) " . dirname("."); // 3) .
  5. ?>

【pathinfo()】

  pathinfo()函数用于返回文件路径的信息

  1. <?php
  2. $path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
  3. echo $path_parts['dirname'], "\n";// '/www/htdocs/inc' 目录名
  4. echo $path_parts['basename'], "\n";// 'lib.inc.php' 文件名
  5. echo $path_parts['extension'], "\n";// 'php' 文件后缀
  6. echo $path_parts['filename'], "\n"; // 'lib.inc' 文件名不带后缀
  7. ?>

【realpath()】

  realpath()函数用于返回规范化的绝对路径名

  在Windows上,realpath()会将unix风格的路径改成Windows风格的

  1. <?php
  2. echo realpath('/wamp');// 'D:\wamp'
  3. ?>

目录遍历

glob()

  glob()函数用于寻找与模式匹配的文件路径

  1. array glob ( string $pattern [, int $flags = 0 ] )

  在www目录下新建a.txt和b.txt文件

  1. <?php
  2. foreach (glob("*.txt") as $filename) {
  3. //a.txt size 1050 b.txt size 73
  4. echo "$filename size " . filesize($filename) . "\n";
  5. }
  6. ?>

opendir()

  opendir()函数用于打开目录句柄。如果成功则返回目录句柄的resource,失败则返回 FALSE

  1. resource opendir ( string $path [, resource $context ] )
  1. <?php
  2. var_dump(opendir('test'))//resource(3, stream)
  3. ?>

closedir()

  closedir()函数用于关闭目录句柄

  1. void closedir ([ resource $dir_handle ] )

  参数dir_handle表示目录句柄的 resource,之前由 opendir()所打开的。如果目录句柄没有指定,那么会假定为是opendir()所打开的最后一个句柄

  1. <?php
  2. $dir = opendir('test');
  3. closedir($dir);
  4. ?>

readdir()

  readdir()函数用于从目录句柄中读取条目,返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回,失败时返回 FALSE

  1. string readdir ([ resource $dir_handle ] )

  在www目录下新建目录test,并在目录test下新建a.txt和b.txt文件

  1. <?php
  2. $dir = opendir('test');
  3. echo readdir($dir)."<br>";//.
  4. echo readdir($dir)."<br>";//..
  5. echo readdir($dir)."<br>";//a.txt
  6. echo readdir($dir)."<br>";//b.txt
  7. echo readdir($dir)."<br>";//
  8. closedir($dir);
  9. ?>

  在遍历目录时,每个目录的前两个返回值都是.和..,.代表当前目录,..代表上一级目录

  所以,一般地,列出当前目录的所有文件并去掉 . 和 ..,常采用下面的代码

  1. <?php
  2. if ($handle = opendir('test')) {
  3. while (false !== ($file = readdir($handle))) {
  4. if ($file != "." && $file != "..") {
  5. echo "$file\n";
  6. }
  7. }
  8. closedir($handle);
  9. }
  10. ?>

  接下来,在test目录下,新建一个目录in,并在in目录中新建文件c.txt。然后,目录和文件区分显示

  [注意]通过is_dir()函数判断目录时,需要加入路径

  1. <?php
  2. if ($handle = opendir('test')) {
  3. while (false !== ($file = readdir($handle))) {
  4. if ($file != "." && $file != "..") {
  5. $file = "test/".$file;
  6. if(is_dir($file)){
  7. echo "目录:".$file."<br>";
  8. }else{
  9. echo "文件:".$file."<br>";
  10. }
  11. }
  12. }
  13. closedir($handle);
  14. }
  15. /*
  16. 文件:test/a.txt
  17. 文件:test/b.txt
  18. 目录:test/in
  19. */
  20. ?>

rewinddir()

  rewinddir()函数用于倒回目录句柄,将参数dir_handle指定的目录流重置到目录的开头

  1. void rewinddir ( resource $dir_handle )

  如果不使用rewinddir()函数,则文件只能遍历一次

  1. <?php
  2. if ($handle = opendir('test')) {
  3. while (false !== ($file = readdir($handle))) {
  4. if ($file != "." && $file != "..") {
  5. $file = "test/".$file;
  6. if(is_dir($file)){
  7. echo "目录:".$file."<br>";
  8. }else{
  9. echo "文件:".$file."<br>";
  10. }
  11. }
  12. }
  13. while (false !== ($file = readdir($handle))) {
  14. if ($file != "." && $file != "..") {
  15. $file = "test/".$file;
  16. if(is_dir($file)){
  17. echo "目录:".$file."<br>";
  18. }else{
  19. echo "文件:".$file."<br>";
  20. }
  21. }
  22. }
  23. closedir($handle);
  24. }
  25.  
  26. /*
  27. 文件:test/a.txt
  28. 文件:test/b.txt
  29. 目录:test/in
  30. */
  31. ?>

  使用rewinddir()函数,可以把目录句柄返回到第一个文件,从而实现重新遍历

  1. <?php
  2. if ($handle = opendir('test')) {
  3. while (false !== ($file = readdir($handle))) {
  4. if ($file != "." && $file != "..") {
  5. $file = "test/".$file;
  6. if(is_dir($file)){
  7. echo "目录:".$file."<br>";
  8. }else{
  9. echo "文件:".$file."<br>";
  10. }
  11. }
  12. }
  13. rewinddir($handle);
  14. while (false !== ($file = readdir($handle))) {
  15. if ($file != "." && $file != "..") {
  16. $file = "test/".$file;
  17. if(is_dir($file)){
  18. echo "目录:".$file."<br>";
  19. }else{
  20. echo "文件:".$file."<br>";
  21. }
  22. }
  23. }
  24. closedir($handle);
  25. }
  26.  
  27. /*
  28. 文件:test/a.txt
  29. 文件:test/b.txt
  30. 目录:test/in
  31. 文件:test/a.txt
  32. 文件:test/b.txt
  33. 目录:test/in
  34. */
  35. ?>

目录统计

disk_total_space()

  disk_total_space()函数返回一个目录的磁盘总大小

  1. float disk_total_space ( string $directory )
  1. <?php
  2. $ds = disk_total_space("C:");
  3. echo $ds."<br>";//126652637184
  4. $ds = disk_total_space("D:");
  5. echo $ds;//1000202240000
  6. ?>

disk_free_space()

  disk_free_space()函数返回目录中的可用空间

  1. float disk_free_space ( string $directory )
  1. <?php
  2. $ds = disk_free_space("C:");
  3. echo $ds."<br>";//86087041024
  4. $ds = disk_free_space("D:");
  5. echo $ds;//481647472640
  6. ?>

  下面来统计在www文件夹下新建的test目录的个数

  1. <?php
  2. $dirn = 0; //目录数
  3. $filen = 0; //文件数
  4. //统计一个目录下的文件和目录的个数
  5. function getdirnum($file) {
  6. global $dirn;
  7. global $filen;
  8. $dir = opendir($file);
  9. while (false !== ($filename = readdir($dir))) {
  10. if($filename!="." && $filename !="..") {
  11. $filename = $file."/".$filename; //更新路径
  12. if(is_dir($filename)) {
  13. $dirn++;
  14. getdirnum($filename); //递归,就可以查看所有子目录
  15. } else {
  16. $filen++;
  17. }
  18. }
  19. }
  20. closedir($dir);
  21. }
  22. getdirnum("test");
  23. echo "目录数为:{$dirn}<br>";//目录数为:1
  24. echo "文件数为:{$filen}<br>";//文件数为:3
  25. ?>

  下面来统计在www文件夹下新建的test目录的大小

  1. <?php
  2. //统计目录大小
  3. function dirsize($file) {
  4. $size = 0;
  5. $dir = opendir($file);
  6. while(false !== ($filename = readdir($dir))) {
  7. if($filename!="." && $filename !="..") {
  8. $filename = $file."/".$filename;
  9. if(is_dir($filename)) {
  10. $size += dirsize($filename);//使用递归
  11. } else {
  12. $size += filesize($filename);
  13. }
  14. }
  15. }
  16. closedir($dir);
  17. return $size;
  18. }
  19. echo "test目录大小为:".dirsize("test")."<br>";//test目录大小为:302
  20. ?>
 

目录增删

mkdir()

  mkdir()函数用于新建目录 

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

rmdir()

  rmdir()函数用于删除目录

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

  [注意]该目录必须是空的,而且要有相应的权限。失败时会产生一个 E_WARNING 级别的错误

unlink()

  unlink()函数用于删除文件

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

  下面来清空test目录

  1. <?php
  2. function deldir($dirname) {
  3. //如果是文件,直接删除即可
  4. if(is_file($dirname)) {
  5. unlink($dirname);
  6. }
  7. $dir = opendir($dirname);
  8. while(FALSE !== ($filename = readdir($dir))) {
  9. if($filename !="." && $filename!="..") {
  10. $filename = $dirname."/".$filename;
  11. if(is_dir($filename)) {
  12. deldir($filename);//递归
  13. }else {
  14. unlink($filename);//删除文件
  15. }
  16. }
  17. }
  18. closedir($dir);
  19. if($dirname != 'test'){
  20. rmdir($dirname);//删除目录
  21. }
  22. }
  23. deldir("test");
  24. ?>

目录复制

copy()

  copy()函数用于拷贝文件 

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

  [注意]copy()函数不能用于复制目录

  1. <?php
  2. $file = 'a.txt';
  3. $newfile = 'a.bak';
  4. copy($file, $newfile);
  5. ?>

rename()

  rename()函数用于重命名一个文件或目录

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

  [注意]rename()函数具有移动文件或目录的功能

  下面把www目录下的test目录剪贴,命名为t,并移动到d盘目录下

  1. <?php
  2. rename("test", "d:/t");
  3. ?>

  使用rename()只能实现剪切的操作,使用copy()只能复制文件。如果要复制目录,则需要使用循环和遍历

  1. <?php
  2. /**
  3. * $dirsrc 原目录
  4. * $dirto 目标目录
  5. */
  6. function copydir($dirsrc, $dirto) {
  7. //如果目录不存在,则新建一个目录
  8. if(!file_exists($dirto)) {
  9. mkdir($dirto);
  10. }
  11. $dir = opendir($dirsrc);
  12. while(FALSE !== ($filename = readdir($dir))) {
  13. if($filename != "." && $filename !="..") {
  14. $srcfile = $dirsrc."/".$filename; //原文件
  15. $tofile = $dirto."/".$filename; //目标文件
  16. if(is_dir($srcfile)) {
  17. copydir($srcfile, $tofile); //递归处理所有子目录
  18. }else{
  19. copy($srcfile, $tofile);//复制文件
  20. }
  21. }
  22. }
  23. }
  24. copydir("test", "d:/t");
  25. ?>

文件操作

touch()

  touch()函数用来设定文件的访问和修改时间。如果文件不存在,则会被创建。成功时返回 TRUE, 或者在失败时返回 FALSE

  1. bool touch ( string $filename [, int $time = time() [, int $atime ]] )

  参数filename表示要设定的文件名,time表示要设定的时间。如果没有提供参数 time 则会使用当前系统的时间;atime表示如果给出了这个参数,则给定文件的访问时间会被设为atime,否则会设置为time。如果没有给出这两个参数,则使用当前系统时间

  1. <?php
  2. touch('abc.txt')
  3. ?>

copy()

  copy()函数用于拷贝文件

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

  [注意]copy()函数不能用于复制目录

  1. <?php
  2. $file = 'a.txt';
  3. $newfile = 'a.bak';
  4. copy($file, $newfile);
  5. ?>

rename()

  rename()函数用于重命名一个文件或目录

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

  [注意]rename()函数具有移动文件或目录的功能

  1. <?php
  2. rename("abc.txt", "d:/cba.txt");
  3. ?>

unlink()

  unlink()函数用于删除文件

  1. bool unlink ( string $filename [, resource $context ] )
  1. <?php
  2. unlink("d:/cba.txt");
  3. ?>

文件内容

fopen()

  fopen()函数用于打开文件或者URL,fopen()将 filename 指定的名字资源绑定到一个流上

  fopen() 中 mode 的可能值列表

  1. mode 说明
  2. 'r' 只读方式打开,将文件指针指向文件头。
  3. 'r+' 读写方式打开,将文件指针指向文件头。
  4. 'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
  5. 'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
  6. 'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
  7. 'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
  1. <?php
  2. //使用绝对路径打开file.txt文件,选择只读模式,并返回资源$handle
  3. $handle = fopen("/home/rasmus/file.txt", "r");
  4.  
  5. //访问文档根目录下的文件,也以只读模式打开
  6. $handle = fopen(“{$_SERVER['DOCUMENT_ROOT']}/data/info.txt", "r");
  7.  
  8. //在 Windows 平台上,转义文件路径中的每个反斜线,或者用斜线,
  9. 以二进制和只写模式组合
  10. $handle = fopen("c:\\data\\file.gif", "wb");
  11.  
  12. //使用相对路径打开file.txt文件,选择只读模式,并返回资源$handle
  13. $handle = fopen("../data/info.txt", "r");
  14.  
  15. //打开远程文件, 使用HTTP协议只能以只读的模式打开
  16. $handle = fopen("http://www.example.com/", "r");
  17.  
  18. //使用FTP协议打开远程文件,如果FTP服务器可写,则可以以写的模式打开
  19. $handle = fopen("ftp://user:password@example.com/somefile.txt", "w");
  20. ?>

fclose()

  fclose()函数用于关闭一个已打开的文件指针

  1. bool fclose ( resource $handle )
  1. <?php
  2. $handle = fopen('test/a.txt', 'r');
  3. fclose($handle);
  4. ?>

fwrite()

  fwrite()函数用于写入文件(可安全用于二进制文件),返回写入的字符数,出现错误时则返回 FALSE

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

  当打开方式为只读模式时,无法向文件写入字符

  1. <?php
  2. $fp = fopen('test/a.txt', 'r');
  3. echo fwrite($fp, '1');//0
  4. echo "<br>";
  5. echo fwrite($fp, '23');//0
  6. echo "<br>";
  7. fclose($fp);
  8. ?>

  当打开方式为写模式时,可以向文件写入字符

  1. <?php
  2. $fp = fopen('test/a.txt', 'w');
  3. echo fwrite($fp, '1');//1
  4. echo "<br>";
  5. echo fwrite($fp, '23');//2
  6. echo "<br>";
  7. fclose($fp);
  8. /*
  9. 文件内容为123
  10. */
  11. ?>

  当打开方式为追加模式时,将向文件的尾部追加新的字符

  1. <?php
  2. $fp = fopen('test/a.txt', 'a');
  3. echo fwrite($fp, '1');//1
  4. echo "<br>";
  5. echo fwrite($fp, '23');//2
  6. echo "<br>";
  7. fclose($fp);
  8. /*
  9. 刷新两次时,文件内容为123123
  10. */
  11. ?>

fgetc()

  fgetc()函数用于从文件指针中读取字符

  [注意]使用fgetc()函数时,需要在fopen()函数中使用读模式

  1. string fgetc ( resource $handle )
  1. <?php
  2. $fp = fopen('test/a.txt', 'r');
  3. echo fgetc($fp);//1
  4. echo fgetc($fp);//2
  5. echo fgetc($fp);//3
  6. fclose($fp);
  7. ?>

feof()

  feof()函数用于测试文件指针是否到了文件结束的位置

  1. bool feof ( resource $handle )
  1. <?php
  2. $fp = fopen('test/a.txt', 'r');
  3. while(!feof($fp)){
  4. echo fgetc($fp);//123123
  5. }
  6. fclose($fp);
  7. ?>

fgets()

  fgets()函数用于从文件指针中读取一行

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

  将test目录下的a.txt文件内容修改为

  1. aa
  2. bbb
  1. <?php
  2. $fp = fopen('test/a.txt', 'r');
  3. echo fgets($fp);//'aa'
  4. echo fgets($fp);//'bbb'
  5. echo fgets($fp);//''
  6. fclose($fp);
  7. ?>

fread()

  fread()函数用于读取文件(可安全用于二进制文件)。fread()从文件指针handle读取最多length个字节。该函数在读取了length个字节或到达了文件末尾(EOF)时将停止读取文件

  1. string fread ( resource $handle , int $length )
  1. <?php
  2. $fp = fopen('test/a.txt', 'r');
  3. echo fread($fp,3);//'aa '
  4. fclose($fp);
  5.  
  6. $fp = fopen('test/a.txt', 'r');
  7. echo fread($fp,filesize('test/a.txt'));//'aa bbb'
  8. fclose($fp);
  9. ?>

fseek()

  fseek()函数用于在文件指针中定位,成功则返回 0;否则返回 -1

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

  将test目录下的a.txt文件内容修改为'12345'

  1. <?php
  2. $fp = fopen('test/a.txt', 'r');
  3. echo fgetc($fp);//'1'
  4. fseek($fp,4);
  5. echo fgetc($fp);//'5'
  6. fclose($fp);
  7. ?>
  1. <?php
  2. $fp = fopen('test/a.txt', 'r');
  3. echo fread($fp,2)."<br>";//12
  4. fseek($fp,4);
  5. echo fread($fp,2)."<br>";//5
  6. fseek($fp,-3,SEEK_END);
  7. echo fread($fp,2)."<br>";//34
  8. fclose($fp);
  9. ?>

ftell()

  ftell()函数用于返回文件指针读/写的位置 

  1. int ftell ( resource $handle )
  1. <?php
  2. $fp = fopen('test/a.txt', 'r');
  3. echo ftell($fp);//0
  4. fgetc($fp);
  5. echo ftell($fp);//1
  6. fseek($fp,4);
  7. echo ftell($fp);//4
  8. fclose($fp);
  9. ?>

rewind()

  rewind()函数用于倒回文件指针的位置,将handle的文件位置指针设为文件流的开头

  1. bool rewind ( resource $handle )
  1. <?php
  2. $fp = fopen('test/a.txt', 'r');
  3. fseek($fp,2);
  4. echo ftell($fp);//2
  5. rewind($fp);
  6. echo ftell($fp);//0
  7. ?>

file_get_contents()

  file_get_contents()函数用于将整个文件读入一个字符串

  1. string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )
  1. <?php
  2. $homepage = file_get_contents('test/a.txt');
  3. echo $homepage;//'12345'
  4. ?>

  页面变为百度首页

  1. <?php
  2. $homepage = file_get_contents('http://www.baidu.com/');
  3. echo $homepage;
  4. ?>

file_put_contents()

  file_put_contents()函数用于将一个字符串写入文件

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

  使用该函数和依次调用 fopen(),fwrite() 以及 fclose() 功能一样

  [注意]默认为写模式,若设置第三个参数为FILE_APPEND,则变为追加模式

  1. <?php
  2. file_put_contents('test/a.txt','abc');
  3. ?>

readfile()

  readfile()函数用于读取文件并写入到输出缓冲

  1. int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )
  1. <?php
  2. readfile('http://www.baidu.com/');//页面中显示百度首页
  3. ?>
  4. <?php
  5. readfile('test/a.txt');//页面中显示abc
  6. ?>

file()

  file()函数用于把整个文件读入一个数组中,每一行作为一个数组的元素

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

  将a.txt的文件内容改为每一行一个数字,分别是1、2、3、4、5、6、7、8、9

  1. <?php
  2. $arr = file('test/a.txt',0);
  3. echo $arr[0]."<br>";//1
  4. echo count($arr);//9
  5. ?>

ftruncate()

  ftruncate()函数用于将文件截断到给定的长度

  1. bool ftruncate ( resource $handle , int $size )

  [注意]使用ftruncate()函数时,需要使用追加模式。经测试,使用读模式时无效,使用写模式时,文件内容被清空

  1. <?php
  2. $fp = fopen("test/a.txt","a");
  3. ftruncate($fp,100);
  4. ?>
 
 
【转发自http://www.cnblogs.com/xiaohuochai/p/6088999.html】

前端学PHP之文件操作(认真读读)的更多相关文章

  1. 前端学PHP之文件操作

    × 目录 [1]文件类型 [2]文件属性 [3]目录路径[4]目录遍历[5]目录统计[6]目录增删[7]目录复制[8]文件操作[9]文件内容 前面的话 在程序运行时,程序本身和数据一般都存在内存中,当 ...

  2. 前端学PHP之PHP操作memcache

    × 目录 [1]安装 [2]连接 [3]增删改查[4]分布式[5]状态[6]安全[7]应用 前面的话 和访问mysql服务器类似,PHP也是作为客户端API访问memcached服务器的,所以同样需要 ...

  3. Java---字节输入,文件操作,病毒制造,请谨慎运行!

    今天刚刚学了Java文件操作,跟着老师的思路,迫不及待的制造了这个小病毒. 用到的是一些小知识,很简单. 创建文件和文件夹,向文件中写入字节. 我已渐渐的爱上了编程!!! 下面附上完整代码: impo ...

  4. 第11讲-Java泛型和文件操作

    1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1.泛型 1.2.2.文件操作 2.具体内容 2.1.Java泛型 2.1.1.为什么需要泛型 我们发现在List中,底层是Object[ ]数 ...

  5. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  6. 小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. 零基础学Python--------第10章 文件及目录操作

    第10章 文件及目录操作 10.1 基本文件操作 在Python中,内置了文件(File)对象.在使用文件对象时,首先需要通过内置的open() 方法创建一个文件对象,然后通过对象提供的方法进行一些基 ...

  8. 【学习笔记】--- 老男孩学Python,day9, 文件操作

    有 + 就是有光标,注意光标位置 不同模式打开文件的完全列表:  http://www.runoob.com/python/python-files-io.html 模式 描述 r 以只读方式打开文件 ...

  9. day08 跟着太白老师学python 文件操作

    文件操作初识: 1. 文件路径 :d:/护士主妇空姐联系方式  (文件路径不要太过复杂,容易碰到转义字符的问题, 当碰到转义字符时,需要在前面+r,或者采用双斜杠(//)) 2. 编码方式 :utf- ...

随机推荐

  1. pdf.js使用教程

    pdf.js框架的魅力所在,为其为HTML5实现的,无需任何本地支持,而且对浏览器的兼容性也是比较好,要求只有一个:浏览器支持HTML5就好了!(不过对于低版本的IE,就只能节哀了!) 据说IE9以上 ...

  2. CSS中的ul与li样式详解

    CSS中的ul与li样式详解ul和li列表是使用CSS布局页面时常用的元素.在CSS中,有专门控制列表表现的属性,常用的有list-style-type属性.list-style-image属性.li ...

  3. 【python】解压文件

    参考:http://essen.iteye.com/blog/1941489 tarfile模块 具体使用方法: https://docs.python.org/2/library/tarfile.h ...

  4. MyBatis之多表关联查询

    1使用resultType.ResultMap处理返回结果 处理返回结果 resultType:指定返回值结果的完全限定名,处理多表查询的结果. 多表查询需要定义vo封装查询的结果. 需求:查询部门和 ...

  5. JavaScript prototype应用

    //JavaScript自定义功能 //1,去除字符串两端空格 String.prototype.trim = function() { var start, end; start = 0; end  ...

  6. CSS设置超出指定宽度自动换行

    一.背景 最近项目中有用到在div中显示用户反馈的信息,是指定宽度的div,超出要自动换行,开始写好后感觉应该没什么问题,后来自己随便输入测试数据的时候发现:如果是纯字母或者是纯数字就会出现超出了也不 ...

  7. TortoiseSVN中Branching和Merging实践

    转自:http://blog.csdn.net/eggcalm/article/details/6606520 使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及 ...

  8. noip2016复习

    明天的复习任务 矩阵乘法 优先队列(老忘记怎么打) 二分图 K短路 单调队列(还是不太明白各种顺序) 扩展欧几里得 费马小定理求素数 哎呀,列了这么多,任重而道远啊-- 今夕是何夕,晚风过花庭-- 故 ...

  9. 51nod1006(lcs)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006 题意:中文题诶- 思路:最长公共子序列模板题- 我们用d ...

  10. 开发一款完备的android应用所必备的知识

    原文:http://blog.csdn.net/xyz_lmn/article/details/17575709