文件和目录的操作
PHP处理本地服务器上的文件和目录是非常方便的但有时候会出现权限和路径相关的问题
打开文件
resource fopen ( string filename string mode [ bool use_include_path [ resource zcontext]] )
$handle = fopen(filenamemode)//打开文件返回代表此文件的资源的句柄
文件名称可以使用相对路径或者绝对路径也可以使用网络协议模式打开模式具有rr+ww+aa+xx+b
在操作二进制文件时如果没有指定 b 标记可能会碰到一些奇怪的问题包括坏掉的图片文件以及关于 rn 字符的奇怪问题
为移植性考虑强烈建议在用 fopen() 打开文件时总是使用 b 标记
以下是几种打开文件的方式
$fp = @fopen(logtxt"rb");
$fp = @fopen(/logtxt"rb");
$fp = @fopen(""rb");//还可以使用ftp和ghoper等协议必须启用phpini文件中的allow_url_fopen选项
////////////////////////////代码部分////////////////////////////////////////
$filename = "userinfotxt";//目录下或include_path中存在这个文件
$filename = "testtxt";//目录下或include_path并不存在这个文件
$resource = fopen($filename"rb");
@$resource = fopen($filename"rb");//因为目录中不存在这个文件并且并未使用或include_path寻找包含文件所在路径则此操作会报错使用错误抑制符@可以迫使浏览器不输出错误信息
if($resource)
echo "打开文件{$filename}成功";
if(!@fopen($filename"r"))
echo "打开文件{$filename}不成功";
//////////////////////////////////////////////////////////////////////////
输出结果
打开文件userinfotxt成功
使用完毕文件后要显式的告诉PHP已经使用完文件让操作系统确保将文件的所有内容正确地从缓沖区刷新到硬盘
使用fclose()关闭文件
bool fclose ( resource handle )//关闭一个已打开的文件指针
读取文件fopen函数的mode参数允许读取PHP提供了几个函数从文件读取数据
string fgets ( int handle [ int length] )从文件指针中读取一行在二进制文件上尝试fgets会产生不可预测的结果
如果不指定长度默认读取K数据碰到换行符(包括在返回值中)EOF 或者已经读取了 length 字节后停止
string fgetss ( resource handle [ int length [ string allowable_tags]] )从文件指针中读取一行并过滤掉HTML标记
fgetc()读取单个字符
fread()读取任意二进制数据
////////////////////////////代码部分////////////////////////////////////////
$handle = fopen ("testjpg" "rb");
$c;
while (!feof($handle)) {
$contents = @fread($handle );//循环读取并将其合并为一个大块文件
}
fclose($handle);
//////////////////////////////////////////////////////////////////////////
输出结果
判断文件读取的状态
每个文件句柄都有一个文件指针或者一个指出下一个操作将在文件中哪里发生的游标根据fopen函数的mode参数
文件指针最初位于文件的开头()或者文件的末尾
feof()可以判断文件是否已经到末尾(到末尾后函数返回TRUE)
filesize()函数返回文件的大小 写入文件
fwrite()函数执行文件写入
////////////////////////////代码部分////////////////////////////////////////
$filename = testtxt;
$somec;
// 首先我们要确定文件存在并且可写
if (is_writable($filename)) {
// 在这个例子里我们将使用添加模式打开$filename
// 因此文件指针将会在文件的开头
// 那就是当我们使用fwrite()的时候$somecontent将要写入的地方
if (!$handle = fopen($filename a)) {
echo "不能打开文件 $filename";
exit;
}
// 将$somecontent写入到我们打开的文件中
if (fwrite($handle $somecontent) === FALSE) {
echo "不能写入到文件 $filename";
exit;
}
echo "成功地将 $somecontent 写入到文件$filename";
fclose($handle);
} else {
}
echo "文件 $filename 不可写";
//////////////////////////////////////////////////////////////////////////
输出结果
成功地将 添加这些文字到文件 写入到文件testtxt
对于二进制数据必须指定第三个参数它包含写入到磁盘的数据字节数
$result = @fwrite($fp$binary_datamb_strlen($binary_databit));
文件权限和其他信息
is_readable()//判断文件是否可读
is_writeable()//判断文件是否可写
is_writable()//判断文件是否可写
fileperms()//判断文件的权限(UNIX风格的文件权限测试函数)
file_exists()//是否存在这个文件
fileowner()//判断文件所属用户
filegroup()//判断文件所属组
删除和重命名文件
unlink()//删除文件
rename()//重命名文件
访问目录
目录访问建议使用前向斜线"/"兼容windows和unix系统
basename()//返回不包括路径信息的文件名
dirname()//返回文件名的目录部分
realpath()//接受相对路径返回文件的绝对路径
pathinfo()//提取给定路径的目录名基本文件名和扩展名
opendir()//打开目录返回资源句柄
readdir()//读取目录项
rewinddir()//将读取指针返回开头
closedir()//关闭读取句柄
chdir()//改变当前脚本执行期间的当前工作目录
mkdir()//创建目录
rmdir()删除目录
////////////////////////////代码部分////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
输出结果
filename:web: filetype: dir
filename: study : filetype: dir