Home >Backend Development >PHP Tutorial >PHP file operation example sharing
This article mainly shares with you PHP file operation examples, that is, recording logs, directory, file traversal, uploading, multiple methods to obtain file extensions, file reference methods, and reference function differences.
1. 文件建立:fopen()
$file = fopen("test.txt","r");
"r" |
Open in read-only mode and point the file pointer to the file header. |
"r+" |
Open in read-write mode and point the file pointer to the file header. |
"w" |
Open the writing mode, point the file pointer to the file header and cut the file size to zero. If the file does not exist, try to create it. |
"w+" |
Open in reading and writing mode, point the file pointer to the file header and cut the file size to zero. If the file does not exist, try to create it. |
"a" |
Open in writing mode and point the file pointer to the end of the file. If the file does not exist, try to create it. |
"a+" |
Open in read-write mode and point the file pointer to the end of the file. If the file does not exist, try to create it. |
2. 文件打开关闭:fopen(),fclose()
3. 文件末尾检查:feof()
函数检测是否已到达文件末尾.
4. 文件读取:fread(),file(), file_get_contents(), fgetc(),fgets()
1. fread(file,length)
从文件指针 file 读取最多 length 个字节,length(必须)
2. file_get_contents(file)
将文件的内容读入到一个字符串中的首选方法
3. file(file)
把整个文件读入一个数组中, 数组中的每个单元都是文件中相应的一行,包括换行符在内。
4. fgetc(file)
从文件指针中读取一个字符
5. fgets(file,length)
从文件指针中读取一行, 碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(要看先碰到那一种情况)。
5. 文件指针:
fseek(file,offset,whence)
把文件指针从当前位置向前或向后移动到新的位置,新位置从文件头开始以字节数度量。
whence可选。可能的值:
SEEK_SET - 设定位置等于 offset 字节。默认。
SEEK_CUR - 设定位置为当前位置加上 offset。
SEEK_END - 设定位置为文件末尾加上 offset (要移动到文件尾之前的位置,offset 必须是一个负值)。 fseek($fp,-2, SEEK_END);//移动指针到文件末尾
ftell() 返回文件指针的当前位置。
rewind() 移动文件指针到文件的开头。
另:php读取超大文件的方法
使用PHP的 fseek 来进行文件操作
这种方式是最为普遍的方式,它不需要将文件的内容全部读入内容,而是直接通过指针来操作,所以效率是相当高效的。
<?php $fp = fopen($file, "r"); $pos = 0; $t = " "; $data = ""; while (!feof($fp)) { while ($t != "\n") { fseek($fp, $pos); $t = fgetc($fp); $pos ++; } $t = " "; $data .= fgets($fp); } fclose ($fp); echo $data ?>
6. 获取文件扩展名:
1. substr(strrchr($filename, '.'), 1);
2. substr($filename, strrpos($filename, '.')+1);
3. end(explode('.', $filename));
4. pathinfo($filename, PATHINFO_EXTENSION); (PHP Filesystem 函数)
7. 目录与文件遍历:
function traverse($path){ $current_dir = opendir($path); //opendir()返回一个目录句柄,失败返回false while(($file = readdir($current_dir)) !==false) {//readdir()返回打开目录句柄中的一个条目 $sub_dir = $path .DIRECTORY_SEPARATOR(‘/’) . $file; //构建子目录路径 if($file == '.' || $file== '..') { continue; } else if(is_dir($sub_dir)) { //如果是目录,进行递归 echo 'Directory ' . $file .':<br>'; traverse($sub_dir); } else { //如果是文件,直接输出 echo 'File in Directory ' . $path .': ' . $file . '<br>'; }} closedir($current_dir); }//记得打开后要关闭目录句柄哦
<br>
8. 文件锁定
flock(file,lock,block)
函数锁定或释放文件。若成功,则返回true。若失败,则返回 false。
Lock 参数可以是以下值之一:
· 要取得共享锁定(读取的程序),将 lock 设为LOCK_SH (share)
· 要取得独占锁定(写入的程序),将 lock 设为LOCK_EX (exclusive)
· 要释放锁定(无论共享或独占),将 lock 设为 LOCK_UN
· 如果不希望 flock() 在锁定时堵塞,则给lock 加上LOCK_NB
block可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。
<?php $file = fopen("test.txt","w+"); // 排它性的锁定 if (flock($file,LOCK_EX)) { fwrite($file,"Write something"); // release lock flock($file,LOCK_UN); } else { echo "Error locking file!"; } fclose($file); ?>
共享锁与排他锁的区别:
1.共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
2.共享锁下其它用户可以并发读取,查询数据。但不能修改,增加,删除数据。资源共享.[1]
相关推荐:
The above is the detailed content of PHP file operation example sharing. For more information, please follow other related articles on the PHP Chinese website!