首頁 >後端開發 >php教程 >(進階篇) PHP常用的檔案操作函數

(進階篇) PHP常用的檔案操作函數

黄舟
黄舟原創
2017-02-06 10:08:121251瀏覽

以下是PHP檔案操作函數。當然,這只是部分,還有很多,我沒有列出來。

一 、解析路徑:

1 取得檔案名稱:

basename();
給予一個包含有指向一個檔案的全路徑的字串,本函數傳回基本的檔案名稱。如果檔名是以 suffix 結束的,那麼這部分也會被去掉。
eg:

$path = "/home/httpd/html/index.php";
$file = basename($path,".php"); // $file is set to "index"

 

2 得到目錄部分:
dirname();
給出一個包含有指向一個檔案的全路徑的字串,本函數回傳去掉名稱後的目錄名稱。
eg:

$path = "/etc/passwd";
$file = dirname($path); // $file is set to "/etc"

 

3 得到路徑關聯陣列
pathinfo();
得到一個指定路徑中的三個部分:目錄名,基本名,副檔名。
eg:

$pathinfo = pathinfo("www/test/index.html");
var_dump($pathinfo);
// $path['dirname']
$path['basename']
$path['extenssion']

 
二、檔案類型
1. filetype();
回傳檔案的類型。可能的值有 fifo,char,dir,block,link,file 和 unknown。
eg:

echo filetype('/etc/passwd'); // file
echo filetype('/etc/');        // dir

 
三、得到給定檔案有用資訊陣列(很有用)

1. fstat();
透過已開啟的檔案指標取得資訊
取得由檔案指標handle 所開啟檔案的統計檔案」資訊.本函數和 stat() 函數相似,除了它是作用於已開啟的檔案指標而不是檔案名稱。
eg:

// 打开文件
$fp = fopen("/etc/passwd", "r");
// 取得统计信息
$fstat = fstat($fp);
// 关闭文件
fclose($fp);
// 只显示关联数组部分
print_r(array_slice($fstat, 13));

2. stat()
取得由filename 指定的檔案的統計資訊(類比fstat())

四、計算大小
1. filesize()
傳回檔案大小的位元組數,如果出錯返回FALSE 並產生一條E_WARNING 等級的錯誤。
eg:

// 输出类似:somefile.txt: 1024 bytes
$filename = 'somefile.txt';
echo $filename . ': ' . filesize($filename) . ' bytes';

 
2. disk_free_space()
取得目錄所在磁碟分割的可用空間(位元組單位)
eg

// $df 包含根目录下可用的字节数
$df = disk_free_space("/");
//在 Windows 下:
disk_free_space("C:");
disk_free_space("D:");

 3.space3. (同上,換掉函數)

另:如需要計算目錄大小,可以寫遞歸函數來實作


程式碼

function dir_size($dir){
$dir_size = 0;
if($dh = @opendir($dir)){
while(($filename = readdir($dh)) != false){
if($filename !='.' and $filename !='..'){
     if(is_file($dir.'/'.$filename)){
$dir_size +=filesize($dir.'/'.$filename);
}else if(is_dir($dir.'/'.$filename)){
      $dir_size +=dir_size($dir.'/'.$filename);
}
}
                   }#end while
            }# end opendir
@closedir($dh);
return $dir_size;
} #end function

 

五、存取與修改時間

1. fileatime(): 最後存取時間

2. filectime(): 最後改變時間(任何資料的修改)

3. filemtime(): 最後修改時間(指僅是內容修改)

 

六、 文件的I/O操作

1. fopen -- 開啟檔案或URL

mode 說明

'r' 只讀方式打開,將檔案指標指向檔案頭。
'r+' 讀寫方式打開,將檔案指標指向檔案頭。
'w' 寫入方式打開,將檔案指標指向檔案頭並將檔案大小截為零。如果文件不存在則嘗試建立之。
'w+' 讀寫方式打開,將檔案指標指向檔案頭並將檔案大小截為零。如果文件不存在則嘗試建立之。
'a' 寫入方式打開,將文件指標指向文件末尾。如果文件不存在則嘗試建立之。
'a+' 讀寫方式打開,將文件指標指向文件末尾。如果文件不存在則嘗試建立之。
'x' 建立並以寫入方式打開,將檔案指標指向檔案頭。如果檔案已存在,則 fopen() 呼叫失敗並傳回 FALSE,
'x+' 建立並以讀寫方式打開,將檔案指標指向檔案頭。如果檔案已存在,則fopen() 呼叫失敗並回傳FALSE
eg:


$handle = fopen("/home/rasmus/file.txt", "r");

 

2.  --把整個檔案讀入一個陣列中(此函數是很有用的)

和file_get_contents() 一樣,只除了file() 將檔案傳回為一個陣列。數組中的每個單元都是檔案中對應的一行,包括換行符在內。如果失敗 file() 回傳 FALSE。

eg:



代碼

$lines = file('http://www.example.com/');
// 在数组中循环,显示 HTML 的源文件并加上行号。
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
// 另一个例子将 web 页面读入字符串。参见 file_get_contents()。
$html = implode(&#39;&#39;, file (&#39;http://www.example.com/&#39;));

3. fgets -- 從檔案指標中讀取一行
從 handle 指向的檔案中讀取一行並傳回長度最多為 length - 1 字節的字串。碰到換行符號(包括在回傳值中)、EOF 或已經讀取了 length - 1 位元組後停止(看先碰到那一種情況)。如果沒有指定 length,則預設為 1K,或說 1024 位元組。

eg:


$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
}

 

4. fgetss -- 從檔案指標讀取一行並過濾掉 HTML 標記

和 fgets() 相同,只除了 fgetss 嘗試從讀取的文字中去掉任何 HTML 和 PHP 標記。

   可以用可選的第三個參數指定哪些標記不被去掉

   另:對的目錄的操作:

1. opendir -- 打開目錄句柄,打開一個目錄句柄,可用於之後的closedir() ,readdir() 和rewinddir() 調用中。

2. readdir -- 從目錄句柄中讀取條目,返回目錄中下一個檔案的檔案名稱。檔案名稱以在檔案系統中的排序傳回。
eg:

 

代碼

// 注意在 4.0.0-RC2 之前不存在 !== 运算符
if ($handle = opendir(&#39;/path/to/files&#39;)) {
echo "Directory handle: $handle\n";
echo "Files:\n";
  
while (false !== ($file = readdir($handle))) {
echo "$file\n";
}
   
while ($file = readdir($handle)) {
echo "$file\n";
}
     closedir($handle);
}

 

3. scandir -- 列出指定路徑中的檔案和目錄(很有用),傳回一個 directory 中的檔案和目錄。

預設的排序順序是按字母升序排列。如果使用了可選參數 sorting_order(設為 1),則排序順序是按字母降序排列。

eg:

$dir    = &#39;/tmp&#39;;
$files1 = scandir($dir);
$files2 = scandir($dir, 1);
print_r($files1);
print_r($files2);

 

另外注:

七、 对文件属性的操作(操作系统环境不同,可能有所不一样,这点要注意)

    1文件是否可读:

       boolis_readable ( string filename )

         如果由 filename 指定的文件或目录存在并且可读则返回 TRUE。

        记住 PHP 也许只能以运行 webserver 的用户名(通常为 'nobody')来访问文件。不计入安全模式的限制。

    2 文件是否可写

         bool is_writable ( string filename )

        如果文件存在并且可写则返回 TRUE。filename 参数可以是一个允许进行是否可写检查的目录名。

         记住 PHP 也许只能以运行 webserver 的用户名(通常为 'nobody')来访问文件。不计入安全模式的限制

   3  检查文件是否存在

    boolfile_exists ( string filename )

      如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE


以上就是(进阶篇) PHP常用的文件操作函数的内容,更多相关内容请关注PHP中文网(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn