您的位置:首页 > 编程语言 > PHP开发

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: