文章目錄
-
- 概述
- 檔案資訊相關函數
-
- file_exists();
- filemtime();
- filesize();
- basename();
- realpath();
- 檔案指針
-
- fseek();
- ftell();
- 檔案鎖
-
- flock();
- 讀寫檔案相關函數
-
- fopen();
- fwrite();
- file_put_contents()
- fgetc();
- fgets();
- fread();
- file();
- readfile();
- fclose();
- 其它檔案操作相關函數
-
- copy();
- unlink();
- is_file();
- rename();
- 建立打開删除目錄操作函數
-
- mkdir();
- opendir();
- closedir();
- rmdir();
- 讀取目錄内容
-
- readdir();
- scandir();
- is_dir();
- 周遊檔案夾内容的方式
- 源碼
概述
php檔案系統指通過一些php函數完成 增删改,讀取資料的一些列操作
檔案資訊相關函數
檔案路徑最好用單引号 或 反斜線\,雙引号可能會有轉義等問題
file_exists();
判斷檔案是否否存在,傳回布爾值
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
var_dump(file_exists($file));
filemtime();
擷取檔案修改時間,傳回時間戳
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
$time = filemtime($file);
echo date('Y,m,d',$time)."<br/>";
filesize();
擷取檔案大小,機關位元組
對 2GB 以上的檔案,一些檔案系統函數可能傳回無法預期的結果 。
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
echo filesize($file)."<br/>";
basename();
傳回路徑中的檔案名部分
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
echo basename($file)."<br/>";
realpath();
傳回規範化絕對路徑,斜線轉反斜線,相對路徑轉絕對路徑 傳回值 布爾
$filere = '../tmp/test.php';
echo realpath($filere)."<br/>";
檔案指針
fseek();
檔案指針操作
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
fseek($fp,1);
ftell();
擷取目前指針位置
fseek($fp,1);
echo ftell($fp);
檔案鎖
flock();

鎖一個檔案,鎖定時間内無法通路與編輯
$filere = '../tmp/test.php';
$fp_filere = fopen($filere,'r');
flock($fp_filere,LOCK_EX);
sleep(20);
讀寫檔案相關函數
fopen();
打開檔案,資源類型
用得較多的mod參數
慎用 w 與 w+
mode | 說明 |
---|---|
r | 隻讀方式打開,将檔案指針指向檔案頭,沒有報錯 |
r+ | 讀寫方式打開,将檔案指針指向檔案頭,沒有報錯 |
a | 在檔案末尾以追加寫入方式打開,沒有則建立 |
a+ | 在檔案末尾以追加讀寫方式打開,沒有則建立 |
w | 寫入方式打開,清空檔案,沒有則建立 |
w+ | 讀寫方式打開,清空檔案,沒有則建立 |
fwrite();
寫入檔案,接收一個資源類型和一個寫入的資料,傳回寫入資料大小的整數
$fp = fopen($file,'r+');
write($fp,$data)
file_put_contents()
寫入一個字元串
接收 字元串類型的路徑與 資料,不用打開檔案,直接寫,檔案存在會清空
fgetc();
接收一個資源類型,fopen
從檔案句柄中擷取一個字元,一次讀取一個,檔案指針會下移
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);
fgets();
跟 上面的 fgetc() 函數基本一樣,但是它可以指定讀取到多少個位元組
len -1
個 ,長度必須大于0,遇到換行符時結束,傳回值為 布爾
注意,如果代碼前面有用 fgetc() 偏移檔案指針,fgets 會從偏移指針開始長度讀取,如果不想,使用 fseek() 函數重置檔案指針
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
$fp = fopen($file,'r');
echo fgetc($fp);
fseek($fp,0);
echo "<hr>";
echo fgets($fp,9);
fread();
跟 fgets() 函數基本一樣,但是不受 換行符影響
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
$fp = fopen($file,'r');
fseek($fp,0);
echo fread($fp,1000);
file();
不需要打開檔案
将檔案每一行讀取為一個數組元素,為一個 索引數組
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
print_r(file($file));
readfile();
讀取檔案并寫入到輸出緩沖
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
readfile($file);
fclose();
關閉一個檔案,及其指針,接收資源類型,傳回布爾值
$fp = fopen($file,'r');
fclose($fp);
其它檔案操作相關函數
copy();
拷貝檔案,傳回布爾值
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
$new_file_name = 'C:\Users\win_wp\Desktop\tmp\1.txt.back';
copy($file,$new_file_name);
unlink();
删除檔案,傳回布爾值
$delfile = 'C:\Users\win_wp\Desktop\tmp\1.txt.back';
unlink($delfile);
is_file();
判斷給定檔案名是否為一個正常的檔案
判斷檔案是否存在,或者區分檔案與檔案夾
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
var_dump(is_file($file));
rename();
重命名一個檔案或目錄
接收兩個個 字元串類型 (源檔案),一個新名字
$new_file_name = 'C:\Users\win_wp\Desktop\tmp\1.txt.back';
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
rename($file,$new_file_name);
建立打開删除目錄操作函數
檔案夾操作
檔案夾操作跟 linux 檔案操作類似
mkdir();
建立檔案夾
$folder = '../tmpfile';
@mkdir($folder,0755,true);
opendir();
打開一個檔案夾句柄,資源類型
$folder = '../tmpfile';
var_dump(opendir($folder));
closedir();
關閉一個檔案夾句柄
$handle = opendir($folder);
var_dump(closedir($handle));
rmdir();
删除目錄
$folder = '../tmpfile';
rmdir($folder);
讀取目錄内容
readdir();
從目錄句柄中讀取條目,傳回布爾值
列出目前目錄下的所有檔案,檔案夾
$folder = 'C:\Users\win_wp\Desktop\tmp';
$opdir = opendir($folder);
$list = readdir($opdir);
echo $list."<br/>";
不過
readdir()
因為指針指向每次隻讀取這個檔案夾第一個目錄或檔案,可以用循環輸出目錄下的所有檔案資訊
$folder = 'C:\Users\win_wp\Desktop\tmp';
$opdir = opendir($folder);
$list = readdir($opdir);
echo $list."<br/>";
while (true){
if ($list != false){
$list = readdir($opdir);
echo $list."<br/>";
}else{
break;
}
}
or
$folder = 'C:\Users\win_wp\Desktop\tmp';
$opdir = opendir($folder);
while ($list = readdir($opdir)){
echo $list."<br/>";
}
scandir();
列出指定路徑中的檔案和目錄,傳回一個索引數組數組
它不需要打開檔案,直接讀取
$sclist = scandir($folder);
var_dump($sclist);
foreach ($sclist as $value){
echo $value."<br/>";
}
is_dir();
判斷是否為目錄(檔案夾)
周遊檔案夾内容的方式
使用scandir函數在周遊數組value
$folder = 'C:\Users\win_wp\Desktop\tmp\\';
$sclist = scandir($folder);
var_dump($sclist);
foreach ($sclist as $value){
echo $value."<br/>";
}
使用readdir逐個讀取周遊
$folder = 'C:\Users\win_wp\Desktop\tmp\\';
$opdir = opendir($folder);
$list = readdir($opdir);
echo $list."<br/>";
while ($list = readdir($opdir)){
echo $list."<br/>";
}
table_folder($folder);
function table_folder($folder){
$tmp_name = $folder;
$folder = 'C:\Users\win_wp\Desktop\tmp\\';
$sclist = scandir($folder);
foreach ($sclist as $value) {
$item = $tmp_name.$value;
echo $item."<br/>";
}
}
源碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>filesystem</title>
</head>
<body>
<?php
/**
* User: win_wp
* data: 2021/05/29
* time: 下午 07:38
*/
$file = 'C:\Users\win_wp\Desktop\tmp\1.txt';
$filere = '../tmp/test.php';
var_dump(file_exists($file));
$time = filemtime($file);
echo date('Y,m,d',$time)."<br/>";
echo filesize($file)."<br/>";
echo basename($file)."<br/>";
echo realpath($filere)."<br/>";
$fp = fopen($file,'r');
$data = "3210f重\n123";
var_dump(fwrite($fp,$data));
file_put_contents('C:\Users\win_wp\Desktop\tmp\1.txt',$data);
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);
fseek($fp,0);
echo "<hr>";
echo fgets($fp,9)."<br/>";
fseek($fp,0);
echo fread($fp,1000)."<br/>";
print_r(file($file));
echo "<br/>";
readfile($file);
echo "<br/>";
// $new_file_name = 'C:\Users\win_wp\Desktop\tmp\1.txt.back';
// copy($file,$new_file_name);
$delfile = 'C:\Users\win_wp\Desktop\tmp\1.txt.back';
@unlink($delfile);
var_dump(is_file($file));
fseek($fp,1);
echo ftell($fp);
fclose($fp);
$fp_filere = fopen($filere,'r');
flock($fp_filere,LOCK_EX);
sleep(2);
$folder = '../tmpfile';
@mkdir($folder,0755,true);
var_dump(opendir($folder));
$handle = opendir($folder);
var_dump(closedir($handle));
// rename($file,$new_file_name);
rmdir($folder);
$folder = 'C:\Users\win_wp\Desktop\tmp';
$opdir = opendir($folder);
$list = readdir($opdir);
echo $list."<br/>";
while (true){
if ($list != false){
$list = readdir($opdir);
echo $list."<br/>";
}else{
break;
}
}
$folder = 'C:\Users\win_wp\Desktop\tmp\\';
$opdir = opendir($folder);
$list = readdir($opdir);
echo $list."<br/>";
while ($list = readdir($opdir)){
echo $list."<br/>";
}
echo "<br/>";
$sclist = scandir($folder);
var_dump($sclist);
foreach ($sclist as $value){
echo $value."<br/>";
}
echo "<hr/>";
table_folder($folder);
function table_folder($folder){
$tmp_name = $folder;
// $folder = 'C:\Users\win_wp\Desktop\tmp\\';
$sclist = scandir($folder);
foreach ($sclist as $value) {
$item = $tmp_name.$value;
echo $item."<br/>";
}
}
?>
</body>
</html>