zl程序教程

您现在的位置是:首页 >  后端

当前栏目

第六章php目录与文件操作

PHP文件 操作 目录 第六章
2023-06-13 09:14:32 时间
一.目录操作
basename--返回路径中的文件名部分
dirname--返回路径中的目录部分
pathinfo--返回文件路径的信息
realpath--返回规范化的绝对路径名
复制代码代码如下:

<?php
$path="demo1.php";
$path=realpath($path);
echobasename($path);
echo"<br>";
echodirname($path);
echo"<br>";
$array_path=pathinfo($path);
echo"basename:".$array_path["basename"]."<br>";
echo"dirname:".$array_path["dirname"]."<br>";
echo"extension:".$array_path["extension"]."<br>";
echo"filename:".$array_path["filename"]."<br>";
?>

Output:
demo1.php
D:\AppServ\www\Basic6
basename:demo1.php
dirname:D:\AppServ\www\Basic6
extension:php
filename:demo1

二.磁盘、目录和文件计数
1.查看文件大小和磁盘空间
filesize--取得文件大小
disk_free_space--返回目录中的可用空间
disk_total_space--返回一个目录的磁盘总大小
复制代码代码如下:

<?php
$path="demo2.php";
$path=realpath($path);
$drive="c:";
echoround(filesize($path)/1024,2)."kb"."<br/>";
echoround(disk_free_space($drive)/1024/1024/1024,2)."GB"."<br/>";
echoround(disk_total_space($drive)/1024/1024/1024,2)."GB"."<br/>";
?>

output
0.26kb
10.61GB
30.01GB

2.获得文件的各种时间
fileatime--取得文件的上次访问时间
filectime--取得文件的inode修改时间
filemtime--取得文件修改时间
复制代码代码如下:
<?php
$file=realpath("../Basic5/demo3.php");
$date_format="Y-m-dh:i:s";
echo"lastestaccessingtime:".date($date_format,fileatime($file))."<br>";
echo"lastestchangetime:".date($date_format,filectime($file))."<br>";
echo"lastestmodifytime:".date($date_format,filemtime($file))."<br>";
?>

output
lastestaccessingtime:2011-12-1804:26:49
lastestchangetime:2011-12-1804:26:49
lastestmodifytime:2011-12-1804:29:15

三.文件处理
文件读写的两种方式:
1.php所有版本都支持的方法:
fopen--打开文件或者URL
fclose--关闭一个已打开的文件指针
fwrite--写入文件(可安全用于二进制文件)
表1.fopen()中mode的可能值列表
mode

说明

"r"

只读方式打开,将文件指针指向文件头。

"r+"

读写方式打开,将文件指针指向文件头。

"w"

写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

"w+"

读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

"a"

写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

"a+"

读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

"x"

创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建之。这和给底层的open(2)系统调用指定O_EXCL|O_CREAT标记是等价的。此选项被PHP4.3.2以及以后的版本所支持,仅能用于本地文件。

"x+"

创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建之。这和给底层的open(2)系统调用指定O_EXCL|O_CREAT标记是等价的。此选项被PHP4.3.2以及以后的版本所支持,仅能用于本地文件。

复制代码代码如下:
<?php
$fp=fopen("file1.txt","w");
$outStr="mynameisanllin,\r\nmyageis29.";
fwrite($fp,$outStr,strlen($outStr));
fclose($fp);
?>

output
mynameisanllin,
myageis29.
2.php5新加入的方法
file_put_contents--将一个字符串写入文件
复制代码代码如下:
<?php
file_put_contents("file2.txt","mynameisanllin,\r\nmyageis29.");
?>

output
mynameisanllin,
myageis29.
读出文件内容的方法:
函数

功能

Fgetc()

读出一个字符,并将指针移到下一个字符

Fgets()

读出一行字符,可以指定一行显示的长度。

Fgetss()

从文件指针中读取一行并过滤掉HTML标记

Fread()

读取定量的字符

Fpassthru()

输出文件到指定处的所有剩余数据

File()

将整个文件读入数组中,以行分组

Readfile()

读入一个文件并写入到输出缓冲

File_get_contents()

将整个文件读入一个字符串

Feof()

判断读完文件函数

File_exists()

查看文件是否存在

示例文件file1.txt的内容如下:
mynameisanllin,
myageis29.
fgetc--从文件指针中读取字符
Demo.php
复制代码代码如下:
<?php
$fp=fopen("file1.txt","r");
echofgetc($fp);
echofgetc($fp);
fclose($fp);
?>

Output:
my
fgets--从文件指针中读取一行
复制代码代码如下:
<?php
$fp=fopen("file1.txt","r");
echofgets($fp);
echofgets($fp);
fclose($fp);
?>

output
mynameisanllin,myageis29.
fgetss--从文件指针中读取一行并过滤掉HTML标记
复制代码代码如下:
<?php
$fp=fopen("file3.txt","w");
$outStr="mynameis<b>anllin</b>";
fwrite($fp,$outStr,strlen($outStr));
fclose($fp);
$ftp=fopen("file3.txt","r");
echofgetss($ftp);
fclose($ftp);
?>

Output
mynameisanllin
fread--读取文件(可安全用于二进制文件)
复制代码代码如下:
<?php
$filename="file1.txt";
$fp=fopen($filename,"r");
$contents=fread($fp,filesize($filename));
echo$contents;
fclose($fp);
?>

Output
mynameisanllin,myageis29.
fpassthru--输出文件指针处的所有剩余数据
复制代码代码如下:
<?php
$filename="file1.txt";
$fp=fopen($filename,"rb");
$leftSize=fpassthru($fp);
echo$leftSize;
fclose($fp);
?>

output
mynameisanllin,myageis29.33
file--把整个文件读入一个数组中
复制代码代码如下:
<?php
$lines=file("file1.txt");
foreach($linesas$line_num=>$line)
{
echo$line_num.":".$line."<br>";
}
?>

output
0:mynameisanllin,
1:myageis29.
readfile--输出一个文件
复制代码代码如下:
<?php
$size=readfile("file1.txt");
echo$size;
?>

output
mynameisanllin,myageis29.33
file_get_contents--将整个文件读入一个字符串(php5.0新增)
复制代码代码如下:
<?php
$contents=file_get_contents("file1.txt");
echo$contents;
?>

output
mynameisanllin,myageis29.
feof--测试文件指针是否到了文件结束的位置
复制代码代码如下:
<?php
$fp=fopen("file1.txt","r");
while(!feof($fp))
{
echofgetc($fp);
}
fclose($fp);
?>

output
mynameisanllin,myageis29.
file_exists--检查文件或目录是否存在
复制代码代码如下:
<metahttp-equiv="content-type"content="text/html;charset=utf-8"/>
<?php
$filename="file1.txt";
if(file_exists($filename))
{
echo"执行文件读写操作";
}
else
{
echo"你要找的文件不存在";
}
?>

output
执行文件读写操作
filesize--取得文件大小
复制代码代码如下:
<?php
$file_size=filesize("file1.txt");
echo$file_size;
?>

output
33
unlink--删除文件
复制代码代码如下:
<?php
$isDeleted=unlink("file3.txt");
echo$isDeleted;
?>

output
1
rewind--倒回文件指针的位置
ftell--返回文件指针读/写的位置
fseek--在文件指针中定位
复制代码代码如下:
<?php
$fp=fopen("file1.txt","r");
fgetc($fp);
fgetc($fp);
echoftell($fp)."<br>";
rewind($fp);
echoftell($fp)."<br>";
fgetc($fp);
fgetc($fp);
echoftell($fp)."<br>";
fseek($fp,0);//sameasrewind($fp)
echoftell($fp)."<br>";
?>

output
2
0
2
0
Flock的操作值
操作值

意义

LOCK_SH(以前为1)

读写锁定。这意味着文件可以共享,其他人可以读该文件

LOCK_EX(以前为2)

写操作锁定。这是互斥的,该文件不能被共享

LOCK_UN(以前为3)

释放已有的锁定

LOCK_NB(以前为4)

防止在请求加锁时发生阻塞

flock--轻便的咨询文件锁定
复制代码代码如下:
<?php
$filename="file1.txt";
$fp=fopen($filename,"rb");
flock($fp,LOCK_EX);//locked
$contents=fread($fp,filesize($filename));
flock($fp,LOCK_UN);//unlocked
echo$contents;
fclose($fp);
?>

output
mynameisanllin,myageis29.
目录句柄操作
opendir--打开目录句柄
readdir--从目录句柄中读取条目
closedir--关闭目录句柄
复制代码代码如下:
<?php
$dir=opendir("../Basic6");
while(!!$file=readdir($dir))
{
echo$file."<br/>";
}
closedir($dir);
?>

output
.
..
.buildpath
.project
.settings
demo1.php
demo10.php
demo11.php
demo12.php
demo13.php
demo14.php
demo15.php
demo16.php
demo17.php
demo18.php
demo19.php
demo2.php
demo20.php
demo3.php
demo4.php
demo5.php
demo6.php
demo7.php
demo8.php
demo9.php
file1.txt
file2.txt
scandir--列出指定路径中的文件和目录
复制代码代码如下:
<?php
$files=scandir("../Basic6");
foreach($filesas$file)
{
echo$file."<br>";
}
?>

output
.
..
.buildpath
.project
.settings
demo1.php
demo10.php
demo11.php
demo12.php
demo13.php
demo14.php
demo15.php
demo16.php
demo17.php
demo18.php
demo19.php
demo2.php
demo20.php
demo21.php
demo3.php
demo4.php
demo5.php
demo6.php
demo7.php
demo8.php
demo9.php
file1.txt
file2.txt
rename--重命名一个文件或目录
复制代码代码如下:
<?php
rename("demo1.php","demo01.php");
if(file_exists("demo01.php"))
{
echo"filerenamesuccess";
}
else
{
echo"filerenamefail";
}
?>

output
filerenamesuccess
rmdir--删除目录
复制代码代码如下:
<?php
rmdir("123");
if(file_exists("123"))
{
echo"deletefilefail";
}
{
echo"deletefilesuccess";
}
?>

output
deletefilesuccess