一、文件处理
1. 打开文件:resouce fopen()
2. 关闭文件:bool fclose()
3. 读写文件:
- 读取整个文件:int readfile()、array file() 和 string file_get_contents( )
- 读取一行数据:string fgets( ),如果有一个参数表示当前指针后面所有内容,如果有两个参数,第二个参数表示需要获取字节长度 和 string fgetss( )会过滤掉html和php标记。
- 读取一个字符:string fgetc( )
- 读取指定长度的字串:string frend( )
4. 写文件
- fwrite( ) 函数也称为fputs( ),它们用法相同。int fwrite( )
- file_put_contents( ) 函数 int file_put_contents( )
5. 复制文件:bool copy( )
6. 重命名:bool rename( )
7. 删除文件:bool unlink( )
8. 文件最后一次被访问的时间:int fileatime( ),时间戳的方式返回。
9. 文件最后一次被修改的事件:int filemtime( ),时间戳的方式返回。
10. 取得文件大小(bytes):int filesize( )
11. 包含文件name的路径信息:array pathinfo(string name{,int options] );
12. 返回文件filename绝对路径:string realpath( )
13. 返回一个数组,包括文件的相关信息,如文件大小、最后修改时间等:array stat( )
在读写文件时,除了file()、readfile()等少数几个函数外,其他操作必须要先使用fopen()函数打开文件,最后用fclose()函数关闭文件。文件信息函数(如filesize、filemtime等)则都不需要打开文件,只要文件存在即可。
二、目录处理(目录是一种特殊的文件)
1. 打开目录:resource opendir( )
2. 关闭目录:void closedir( )
is_dir( )函数判断当前路径是否为一个合法的目录。如果合法返回true,否则返回false。
3. 浏览目录:array scandir( );
4. 新建目录:bool mkdir( )
5. 删除目录:bool rmidr( )
6. 取得当前工作目录:string getcwd(void)
7. 改变当前目录:bool chdir( );
8. 返回目录中的可用空间(bytes),被检查的目录必须通过服务器的文件系统访问:float disk_free_space()
9. 返回目录的总空间大小:float disk_total_space()
10. 返回目录下一个文件的文件名(使用此函数时,目录必须是使用opendir()函数打开的):string readdir( )
11. 将指定的目录重新指定到目录的开头:void rewinddir( )
三、文件处理的高级应用
1. 远程文件的访问
PHP支持URL格式的文件调用,只要在php.ini中allow_url_fopen选项设为ON。
如:fopen('http://127.0.0.1/tm/sl/index.php', 'rb');
2. 文件指针
PHP可以实现文件指针的定位及查询,从而实现所需信息的快速查询。文件指针函数有rewind( )、fseek() 、feon() 和ftell()。
- rewind()函数:该函数将文件handle的指针设为文件流的开头
语法:bool rewind( );如果将文件以追加("a")模式打开,写入文件的任何数据总是会被附加在文件已有内容的末尾,不论文件指针的位置在何处。
- fseek() 函数:该函数实现文件指针的定位
语法:int fseek();
- feof() 函数:该函数判断文件指针是否在文件尾
语法:bool feof( );
- ftell() 函数:该函数返回当前指针位置
语法:int ftell( );
$filename = "test.txt";
if(is_file($filename)){ // 判断文件是否存在
echo "文字总字节数:".filesize($filename)."<br>";
$fopen = fopen($filename, 'rb');
echo "初始指针位置:".ftell($fopen)."<br>";
fseek($fopen, 22); //移动指针
echo "使用fseek函数后指针位置:".ftell($fopen)."<br>";
echo "输出当前指针后面的内容".fgets($fopen)."<br>";
if(feof($fopen)){ //判断指针是否指向文件末尾
echo "当前指针指向文件末尾:".ftell($fopen)."<br>"; //如果指针在末尾则输出指针位置
rewind($fopen);
echo "使用rewind函数后指针的位置:".ftell($fopen)."<br>";
echo "输出前22个字节的内容:".fgets($fopen, 22);
fclose($fopen);
}else {
echo "文件不存在";
}
}
3. 锁定文件
在向一个文本文件写入内容时,需要先锁定该文件,以防止其他用户同时修改此文件内容,使用flock() 函数
语法:boll flock(resource handle, int operation)
参数值 | 说明 |
LOCK_SH | 取得共享锁定(读取文件) |
LOCK_EX | 取得独占锁定(写入文件) |
LOCK_UN | 释放锁定 |
LOCK_NB | 防止flock() 在锁定时堵塞 |
四、上传文件
1. 配置php.ini文件
- file_uploads:值为on,说明服务器支持文件上传,off则不支持。
- upload_tep_dir:上传文件临时目录。如果想要指定为,可在这里设置,否则使用系统默认目录即可。
- upload_max_filesize:服务器允许上传的文件的最大值,以MB为单位。系统默认为2MB。
- max_execution_time:PHP中一个指令所能执行的最长时间,单位为秒。
- memory_limit:PHP中一个指令所分配的内存空间,单位是MB。
2. 预定义变量$_FILES
元素名 | 说明 |
$_FILES[filename][name] | 存储了上传文件的文件名 |
$_FILES[filename][size] | 存储了文件大小,单位为字节 |
$_FILES[filename][tmp_name] | 文件上传时,首先在临时目录中被保存成一个临时文件。该变量为临时文件名 |
$_FILES[filename][type] | 上传文件的类型 |
$_FILES[filename][error] | 存储了上传文件的结果。如果值为0,说明上传成功。 |
3. 文件上传函数:将上传文件存储到指定的位置。成功返回true,否则返回false。
语法:bool move_uploaded_file(string filename, string destination)
参数:filename是上传文件的临时文件名,即$_FILES[tmp_name];
destination是上传后保存的新的路径和名称