php文件操作系列
2015-07-27 22:48
656 查看
1.文件处理
2.目录处理
3.文件上传和下载
所有文件操作函数 都是php提供的 基于 linux/Unix 模型的
文件处理
1. 文件类型
以linux为模型 在window中只能获取file dir unknow 类型
在linux下面 有dlock char dir fifo file link unknow 类型
block 块设备文件 磁盘分区 软驱 cd-rom等
char 字符设备 I/O 以字符为单位的设备 键盘 打印机
dir 目录类型 目录也是文件的一种
2. 文件属性
3. 和文件目录的函数
相对路径 ./ 当前目录
绝对路径 从根目录开始
路径分隔符
linux/Unix "/"
window "\" 因为这个反斜杠 在双引号里面是\转移字符 所以你要用\\才可以
DIRECTORY_SEPARATOR 这个常量会自动检测系统 然后用相应系统的路径分隔符
但是不管什么系统 都支持正斜杠
/ 在php中 是指操作系统的跟
/ 在浏览器中是指网站的根目录
4. 文件的打开与关闭
读取文件
file_get_contents();
file();
readfile();
fopen();
fread();
fgetc();
fgets();
写入文件
file_put_contents();
fopen();
fwrite(); 别名 fputs();
5. 文件内部移动指针
6. 文件的锁定机制
7. 文件操作 创建 删除 移动
目录操作
1. 目录的遍历
opendir() 打开目录
readdir()
closedir()
rewinddir()
2. 目录的创建
3. 目录的删除
4. 目录的复制
5. 统计目录大小
文件上传下载
=========================================================
文件处理
filetype(dir) 获取目录类型 file dir
is_dir — 判断给定文件名是否是一个目录
is_executable — 判断给定文件名是否可执行
is_file — 判断给定文件名是否为一个正常的文件
is_link — 判断给定文件名是否为一个符号连接
is_readable — 判断给定文件名是否可读
is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
is_writable — 判断给定的文件名是否可写
is_writeable — is_writable 的别名
文件属性
file_exists() 检查文件或目录是否存在
filesize — 取得文件大小
fileatime — 取得文件的上次访问时间
filectime — 取得文件的 inode 修改时间
filegroup — 取得文件的组
fileinode — 取得文件的 inode
filemtime — 取得文件修改时间
fileowner — 取得文件的所有者
fileperms — 取得文件的权限
stat - 返回文件的各种详细信息 数组表示
文件目录
basename - 返回目录中文件名的部分
dirname - 返回目录中目录的部分
pathinfo — 返回文件路径的信息
文件操作
touch() 创建文件
unlink() 删除文件
rename() 移动文件 和文件重命名 remove(当前文件路径,目标文件路径); rename('a.txt','b.txt');
copy(source,desc) 复制文件 将文件从 source 拷贝到 dest。成功时返回 TRUE, 或者在失败时返回 FALSE.
chgrp() 改变文件属组
chmod() 改变文件模式
chown() 改变文件所有者
file_get_contents() 简单获取一个文件放入字符串中
file_put_contents() 写入一个文件 没有就新建 有的话就覆盖 返回写入的length
readfile() 简单读取并输出整个文件
file() 简单把一个文件写入一个数组里面 每行是一个下标
========简单读取 不能从指定的部分读取 也不能给文件加锁
fopen(文件地址,打开方式) 打开文件或者url
'r'只读方式打开,将文件指针指向文件头。
'r+'读写方式打开,将文件指针指向文件头。
'w'写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+'读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
w+ 除了可以用 fwrite()写 还可以fread() 读
'a'写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+'读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 这个不错
'x'创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
'x+'创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
'b' 以二进制打开文件 (图片 电影) windiw系统可以区分 二进制和文本 uinux不区分 所以你得连写 wb 否则一个b没用 wb 就是以二进制写入 rb 就是读取二进制
't' 以文本模式打开文件
fclose(资源句柄) 关闭资源 必须是 fopen打开的
fwrite(要写的资源,写的内容) 文件写入 和 fputs() 是别名
fread(要读的资源句柄,文件名称); 是全部读出来 fread($file,filesize('a.txt')); 第二个参数 是读取多少长度如果是本地文件 可以获取长度的 如果是远程文件 就不要用这个读取
feof(文件资源句柄) 判断文件是否读取完了 读完了 就返回true 否则返回 false
fgetc(文件资源句柄) 一次读取一个字符
fgetcsv — 从文件指针中读入一行并解析 CSV 字段
fgets(文件资源句柄) 一次读取一行内容
ftell(文件资源句柄) 返回文件指针的位置
fseek(文件句柄,位置) 指定从哪里开始读 远程文件不可以 SEEK_CUR 从头 SEEK_END 从尾部
可以设定 每断文字多少长度 然后从某个区域取文件 不过要规划好
rewind(文件资源) 回到文件头部
flock(资源句柄,加锁解锁) 给文件加锁 第二个参数LOCK_SH 读取时候加锁 LOCK_EX写入的时候加锁 LOCK_UN释放锁定 LOCK_NB不堵塞 可以这样 flock($file,LOCK_EX | LOCK_NB);
目录操作
opendir(目录名) 打开一个目录
closedir(目录句柄) 关闭一个目录
readdir(目录句柄) 输出目录里面的第一个文件
mkdir(目录名称,权限) 创建一个目录
rmdir(删除目录 ) 目录必须是空的
rename(移动的目录,要移动到哪里) 移动目录函数 rename('a/a.txt','b/b.txt');
【Demo:】
文件属性函数
[php] view
plaincopy
<span style="font-size:14px;">function myg($file) {
if(!file_exists($file)) {
exit('文件不存在!');
}else {
echo "文件类型是".filetype($file).'<br />';
}
if(is_file($file)) {
echo '这是个文件<br />';
echo "文件大小是".filesize($file).'<br />';
}
if(is_dir($file)) {
echo '这是个文件夹';
}
if(!file_exists($file)) {
exit('文件不存在!');
}
if(is_readable($file)) {
echo "可读<br />";
}
if(is_writable($file)) {
echo "可写<br />";
}
if(is_executable($file)) {
echo "可执行<br />";
}
echo "创建时间".date('Y-m-d H:i:s',filectime($file)).'<br />';
echo "最后修改时间".date('Y-m-d H:i:s',filemtime($file)).'<br />';
echo "最后访问时间".date('Y-m-d H:i:s',fileatime($file)).'<br />';
}</span>
获取文件大小
[php] view
plaincopy
<span style="font-size:14px;">echo getSize(filesize('aa.txt'));
function getSize($size) {
$dw = "Bye";
if($size >= pow(2,40)){
$size = round($size/pow(2,40),2);
$dw = "TB";
}
elseif($size >= pow(2,30)){
$size = round($size/pow(2,30),2);
$dw = "GB";
}
elseif($size >= pow(2,20)){
$size = round($size/pow(2,20),2);
$dw = "MB";
}
elseif($size >= pow(2,10)){
$size = round($size/pow(2,10),2);
$dw = "KB";
}
else {
$dw = "Byts";
}
return $size.$dw;
}</span>
读文件
[php] view
plaincopy
<span style="font-size:14px;">function read($fileName) {
$file = fopen($fileName,'r');
flock($file,LOCK_SH);
$con = fread($file,filesize($fileName));
flock($file,LOCK_UN);
fclose($file);
return $con;
}</span>
写文件
[php] view
plaincopy
<span style="font-size:14px;">function write($fileName,$mess) {
$file = fopen($fileName,'a');
flock($file,LOCK_EX);
fwrite($file,$mess);
flock($file,LOCK_UN);
fclose($file);
}</span>
读取目录
[php] view
plaincopy
<span style="font-size:14px;">$dir = opendir($dirName);
while($fileName = readdir($dir)) {
echo $fileName.'<br />';
}
closedir($dir);</span>
循环删除文件夹
[php] view
plaincopy
<span style="font-size:14px;">function fnrmdir($dirName) {
if(is_dir($dirName)) {
$dir = opendir($dirName);
while($fileName = readdir($dir)) {
if($fileName != '.' && $fileName != '..') {
$file = $dirName.'/'.$fileName;
if(is_dir($file)) {
fnrmdir($file);
} else {
unlink($file);
echo "删除".$file.'ok<br />';
}
}
}
closedir($dir);
rmdir($dirName);
echo "删除".$dirName.'ok<br />';
} else {
return false;
}
return true;
}</span>
复制文件夹
[php] view
plaincopy
<span style="font-size:14px;">function copydir($dirsrc,$newDir) {
if(is_file($newDir)) {
return "不是一个目录";
}
if(!file_exists($newDir)) {
mkdir($newDir);
}
$dir = opendir($dirsrc);
while($fileName = readdir($dir)) {
if($fileName != '.' && $fileName != '..') {
$file1 = $dirsrc.'/'.$fileName;
$file2 = $newDir.'/'.$fileName;
if(is_dir($file1)) {
copydir($file1,$file2);
} else {
copy($file1,$file2);
}
}
}
closedir($dir);
return true;
}</span>
2.目录处理
3.文件上传和下载
所有文件操作函数 都是php提供的 基于 linux/Unix 模型的
文件处理
1. 文件类型
以linux为模型 在window中只能获取file dir unknow 类型
在linux下面 有dlock char dir fifo file link unknow 类型
block 块设备文件 磁盘分区 软驱 cd-rom等
char 字符设备 I/O 以字符为单位的设备 键盘 打印机
dir 目录类型 目录也是文件的一种
2. 文件属性
3. 和文件目录的函数
相对路径 ./ 当前目录
绝对路径 从根目录开始
路径分隔符
linux/Unix "/"
window "\" 因为这个反斜杠 在双引号里面是\转移字符 所以你要用\\才可以
DIRECTORY_SEPARATOR 这个常量会自动检测系统 然后用相应系统的路径分隔符
但是不管什么系统 都支持正斜杠
/ 在php中 是指操作系统的跟
/ 在浏览器中是指网站的根目录
4. 文件的打开与关闭
读取文件
file_get_contents();
file();
readfile();
fopen();
fread();
fgetc();
fgets();
写入文件
file_put_contents();
fopen();
fwrite(); 别名 fputs();
5. 文件内部移动指针
6. 文件的锁定机制
7. 文件操作 创建 删除 移动
目录操作
1. 目录的遍历
opendir() 打开目录
readdir()
closedir()
rewinddir()
2. 目录的创建
3. 目录的删除
4. 目录的复制
5. 统计目录大小
文件上传下载
=========================================================
文件处理
filetype(dir) 获取目录类型 file dir
is_dir — 判断给定文件名是否是一个目录
is_executable — 判断给定文件名是否可执行
is_file — 判断给定文件名是否为一个正常的文件
is_link — 判断给定文件名是否为一个符号连接
is_readable — 判断给定文件名是否可读
is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
is_writable — 判断给定的文件名是否可写
is_writeable — is_writable 的别名
文件属性
file_exists() 检查文件或目录是否存在
filesize — 取得文件大小
fileatime — 取得文件的上次访问时间
filectime — 取得文件的 inode 修改时间
filegroup — 取得文件的组
fileinode — 取得文件的 inode
filemtime — 取得文件修改时间
fileowner — 取得文件的所有者
fileperms — 取得文件的权限
stat - 返回文件的各种详细信息 数组表示
文件目录
basename - 返回目录中文件名的部分
dirname - 返回目录中目录的部分
pathinfo — 返回文件路径的信息
文件操作
touch() 创建文件
unlink() 删除文件
rename() 移动文件 和文件重命名 remove(当前文件路径,目标文件路径); rename('a.txt','b.txt');
copy(source,desc) 复制文件 将文件从 source 拷贝到 dest。成功时返回 TRUE, 或者在失败时返回 FALSE.
chgrp() 改变文件属组
chmod() 改变文件模式
chown() 改变文件所有者
file_get_contents() 简单获取一个文件放入字符串中
file_put_contents() 写入一个文件 没有就新建 有的话就覆盖 返回写入的length
readfile() 简单读取并输出整个文件
file() 简单把一个文件写入一个数组里面 每行是一个下标
========简单读取 不能从指定的部分读取 也不能给文件加锁
fopen(文件地址,打开方式) 打开文件或者url
'r'只读方式打开,将文件指针指向文件头。
'r+'读写方式打开,将文件指针指向文件头。
'w'写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+'读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
w+ 除了可以用 fwrite()写 还可以fread() 读
'a'写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+'读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 这个不错
'x'创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
'x+'创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
'b' 以二进制打开文件 (图片 电影) windiw系统可以区分 二进制和文本 uinux不区分 所以你得连写 wb 否则一个b没用 wb 就是以二进制写入 rb 就是读取二进制
't' 以文本模式打开文件
fclose(资源句柄) 关闭资源 必须是 fopen打开的
fwrite(要写的资源,写的内容) 文件写入 和 fputs() 是别名
fread(要读的资源句柄,文件名称); 是全部读出来 fread($file,filesize('a.txt')); 第二个参数 是读取多少长度如果是本地文件 可以获取长度的 如果是远程文件 就不要用这个读取
feof(文件资源句柄) 判断文件是否读取完了 读完了 就返回true 否则返回 false
fgetc(文件资源句柄) 一次读取一个字符
fgetcsv — 从文件指针中读入一行并解析 CSV 字段
fgets(文件资源句柄) 一次读取一行内容
ftell(文件资源句柄) 返回文件指针的位置
fseek(文件句柄,位置) 指定从哪里开始读 远程文件不可以 SEEK_CUR 从头 SEEK_END 从尾部
可以设定 每断文字多少长度 然后从某个区域取文件 不过要规划好
rewind(文件资源) 回到文件头部
flock(资源句柄,加锁解锁) 给文件加锁 第二个参数LOCK_SH 读取时候加锁 LOCK_EX写入的时候加锁 LOCK_UN释放锁定 LOCK_NB不堵塞 可以这样 flock($file,LOCK_EX | LOCK_NB);
目录操作
opendir(目录名) 打开一个目录
closedir(目录句柄) 关闭一个目录
readdir(目录句柄) 输出目录里面的第一个文件
mkdir(目录名称,权限) 创建一个目录
rmdir(删除目录 ) 目录必须是空的
rename(移动的目录,要移动到哪里) 移动目录函数 rename('a/a.txt','b/b.txt');
【Demo:】
文件属性函数
[php] view
plaincopy
<span style="font-size:14px;">function myg($file) {
if(!file_exists($file)) {
exit('文件不存在!');
}else {
echo "文件类型是".filetype($file).'<br />';
}
if(is_file($file)) {
echo '这是个文件<br />';
echo "文件大小是".filesize($file).'<br />';
}
if(is_dir($file)) {
echo '这是个文件夹';
}
if(!file_exists($file)) {
exit('文件不存在!');
}
if(is_readable($file)) {
echo "可读<br />";
}
if(is_writable($file)) {
echo "可写<br />";
}
if(is_executable($file)) {
echo "可执行<br />";
}
echo "创建时间".date('Y-m-d H:i:s',filectime($file)).'<br />';
echo "最后修改时间".date('Y-m-d H:i:s',filemtime($file)).'<br />';
echo "最后访问时间".date('Y-m-d H:i:s',fileatime($file)).'<br />';
}</span>
获取文件大小
[php] view
plaincopy
<span style="font-size:14px;">echo getSize(filesize('aa.txt'));
function getSize($size) {
$dw = "Bye";
if($size >= pow(2,40)){
$size = round($size/pow(2,40),2);
$dw = "TB";
}
elseif($size >= pow(2,30)){
$size = round($size/pow(2,30),2);
$dw = "GB";
}
elseif($size >= pow(2,20)){
$size = round($size/pow(2,20),2);
$dw = "MB";
}
elseif($size >= pow(2,10)){
$size = round($size/pow(2,10),2);
$dw = "KB";
}
else {
$dw = "Byts";
}
return $size.$dw;
}</span>
读文件
[php] view
plaincopy
<span style="font-size:14px;">function read($fileName) {
$file = fopen($fileName,'r');
flock($file,LOCK_SH);
$con = fread($file,filesize($fileName));
flock($file,LOCK_UN);
fclose($file);
return $con;
}</span>
写文件
[php] view
plaincopy
<span style="font-size:14px;">function write($fileName,$mess) {
$file = fopen($fileName,'a');
flock($file,LOCK_EX);
fwrite($file,$mess);
flock($file,LOCK_UN);
fclose($file);
}</span>
读取目录
[php] view
plaincopy
<span style="font-size:14px;">$dir = opendir($dirName);
while($fileName = readdir($dir)) {
echo $fileName.'<br />';
}
closedir($dir);</span>
循环删除文件夹
[php] view
plaincopy
<span style="font-size:14px;">function fnrmdir($dirName) {
if(is_dir($dirName)) {
$dir = opendir($dirName);
while($fileName = readdir($dir)) {
if($fileName != '.' && $fileName != '..') {
$file = $dirName.'/'.$fileName;
if(is_dir($file)) {
fnrmdir($file);
} else {
unlink($file);
echo "删除".$file.'ok<br />';
}
}
}
closedir($dir);
rmdir($dirName);
echo "删除".$dirName.'ok<br />';
} else {
return false;
}
return true;
}</span>
复制文件夹
[php] view
plaincopy
<span style="font-size:14px;">function copydir($dirsrc,$newDir) {
if(is_file($newDir)) {
return "不是一个目录";
}
if(!file_exists($newDir)) {
mkdir($newDir);
}
$dir = opendir($dirsrc);
while($fileName = readdir($dir)) {
if($fileName != '.' && $fileName != '..') {
$file1 = $dirsrc.'/'.$fileName;
$file2 = $newDir.'/'.$fileName;
if(is_dir($file1)) {
copydir($file1,$file2);
} else {
copy($file1,$file2);
}
}
}
closedir($dir);
return true;
}</span>
相关文章推荐
- YII框架修改页面布局
- php获取文件名称和扩展名
- 汇率转换
- php编程冒泡排序
- TP中cache方法使用
- input a random number from 1-100. Output a random number from 1-30
- php吧字符串直接转换成数组处理
- 监听ContentProvider中数据的变化
- URI+ContentProvider+ContenResolver
- PHP上传文件(学习)
- sycPHPCMS v1.6 cookie sqlinjection
- 360浏览器 极速模式下,有些幻灯图片不显示,但其它火狐和IE浏览器都显示
- php技术实现加载字体并保存成图片
- PHP中的SESSION机制
- 关于onethinkphp 分类数据
- PHP之cookie详解
- PHP 连接新浪云,mySQL数据库时,出错的问题解决
- phpMyadmin 修改上传文件大小限制
- 在Windows中配置PHP的OpenSSL模块
- thinkphp C方法问题