服务器之家

服务器之家 > 正文

第六章 php目录与文件操作

时间:2019-12-20 16:31     来源/作者:PHP教程网

一.目录操作 
basename -- 返回路径中的文件名部分 
dirname -- 返回路径中的目录部分 
pathinfo -- 返回文件路径的信息 
realpath -- 返回规范化的绝对路径名 

复制代码代码如下:


<?php 
$path = 'demo1.php'; 
$path = realpath($path); 
echo basename($path); 
echo '<br>'; 
echo dirname($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:'; 
echo round(filesize($path)/1024,2).'kb'.'<br/>'; 
echo round(disk_free_space($drive)/1024/1024/1024,2).'GB'.'<br/>'; 
echo round(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-d h:i:s'; 
echo 'lastest accessing time : '.date ( $date_format, fileatime ( $file ) ) . '<br>'; 
echo 'lastest change time : '.date ( $date_format, filectime ( $file ) ) . '<br>'; 
echo 'lastest modify time : '.date ( $date_format, filemtime ( $file ) ) . '<br>'; 
?> 


output 
lastest accessing time : 2011-12-18 04:26:49 
lastest change time : 2011-12-18 04:26:49 
lastest modify time : 2011-12-18 04: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 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

'x+'

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

复制代码代码如下:


<?php 
$fp = fopen('file1.txt','w'); 
$outStr = "my name is anllin,\r\nmy age is 29."; 
fwrite($fp,$outStr,strlen($outStr)); 
fclose($fp); 
?> 


output 
my name is anllin, 
my age is 29. 
2.php5新加入的方法 
file_put_contents -- 将一个字符串写入文件 

复制代码代码如下:


<?php 
file_put_contents('file2.txt',"my name is anllin,\r\nmy age is 29."); 
?> 


output 
my name is anllin, 
my age is 29. 
读出文件内容的方法: 

函数

功能

Fgetc()

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

Fgets()

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

Fgetss()

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

Fread()

读取定量的字符

Fpassthru()

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

File()

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

Readfile()

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

File_get_contents()

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

Feof()

判断读完文件函数

File_exists()

查看文件是否存在

示例文件file1.txt的内容如下: 
my name is anllin, 
my age is 29. 
fgetc -- 从文件指针中读取字符 
Demo.php 

复制代码代码如下:


<?php 
$fp = fopen('file1.txt','r'); 
echo fgetc($fp); 
echo fgetc($fp); 
fclose($fp); 
?> 


Output: 
my 
fgets -- 从文件指针中读取一行 

复制代码代码如下:


<?php 
$fp = fopen('file1.txt','r'); 
echo fgets($fp); 
echo fgets($fp); 
fclose($fp); 
?> 


output 
my name is anllin, my age is 29. 
fgetss -- 从文件指针中读取一行并过滤掉 HTML 标记 

复制代码代码如下:


<?php 
$fp = fopen('file3.txt','w'); 
$outStr = "my name is <b>anllin</b>"; 
fwrite($fp,$outStr,strlen($outStr)); 
fclose($fp); 
$ftp = fopen('file3.txt','r'); 
echo fgetss($ftp); 
fclose($ftp); 
?> 


Output 
my name is anllin 
fread -- 读取文件(可安全用于二进制文件) 

复制代码代码如下:


<?php 
$filename = 'file1.txt'; 
$fp = fopen($filename,'r'); 
$contents = fread($fp,filesize($filename)); 
echo $contents; 
fclose($fp); 
?> 


Output 
my name is anllin, my age is 29. 
fpassthru -- 输出文件指针处的所有剩余数据 

复制代码代码如下:


<?php 
$filename = 'file1.txt'; 
$fp = fopen($filename,'rb'); 
$leftSize = fpassthru($fp); 
echo $leftSize; 
fclose($fp); 
?> 


output 
my name is anllin, my age is 29. 33 
file -- 把整个文件读入一个数组中 

复制代码代码如下:


<?php 
$lines = file('file1.txt'); 
foreach ($lines as $line_num => $line) 

echo $line_num.' : '.$line.'<br>'; 

?> 


output 
0 : my name is anllin, 
1 : my age is 29. 
readfile -- 输出一个文件 

复制代码代码如下:


<?php 
$size = readfile('file1.txt'); 
echo $size; 
?> 


output 
my name is anllin, my age is 29.33 
file_get_contents -- 将整个文件读入一个字符串(php5.0新增) 

复制代码代码如下:


<?php 
$contents = file_get_contents('file1.txt'); 
echo $contents; 
?> 


output 
my name is anllin, my age is 29. 
feof -- 测试文件指针是否到了文件结束的位置 

复制代码代码如下:


<?php 
$fp = fopen('file1.txt','r'); 
while(!feof($fp)) 

echo fgetc($fp); 

fclose($fp); 
?> 


output 
my name is anllin, my age is 29. 
file_exists -- 检查文件或目录是否存在 

复制代码代码如下:


<meta http-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 

rewind -- 倒回文件指针的位置 
ftell -- 返回文件指针读/写的位置 
fseek -- 在文件指针中定位 

复制代码代码如下:


<?php 
$fp = fopen ( 'file1.txt', 'r' ); 
fgetc ( $fp ); 
fgetc ( $fp ); 
echo ftell ( $fp ) . '<br>'; 
rewind ( $fp ); 
echo ftell ( $fp ) . '<br>'; 
fgetc ( $fp ); 
fgetc ( $fp ); 
echo ftell ( $fp ) . '<br>'; 
fseek($fp,0);//same as rewind ($fp) 
echo ftell ( $fp ) . '<br>'; 
?> 


output 




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 
my name is anllin, my age is 29. 
目录句柄操作 
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($files as $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 'file rename success'; 

else 

echo 'file rename fail'; 

?> 


output 
file rename success 
rmdir -- 删除目录 

复制代码代码如下:


<?php 
rmdir('123'); 
if(file_exists('123')) 

echo 'delete file fail'; 


echo 'delete file success'; 

?> 


output 
delete file success

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
返回顶部