php面試筆記(7)-php基礎知識-文件及目錄處理考點

本文是根據慕課網Jason老師的課程進行的PHP面試知識點總結和昇華,如有侵權請聯繫我進行刪除,email:[email protected]

在面試中,考官往往喜歡基礎紮實的面試者,而文件及目錄處理相關的考點,往往是大家容易忽視的一個點,今天冷月就來幫各位小夥伴們梳理一下,在面試中文件及目錄處理相關的注意點。

回顧真題

不斷在文件hello.txt頭部寫入一行"Hello world"字符串,要求代碼完整

答案:

<?php
/**
 * Created by 冷月小白.
 * 微信公衆號: 學長冷月
 */

$file = './hello.txt';
$handle = fopen($file,'r'); //以只讀的方式打開文件,指針指向文件開頭
$content = fread($handle,filesize($file)); //將文件全部讀出
var_dump($content);
$content = "Hello World\n" . $content;  //拼接字符串
fclose($handle); //關閉文件

$handle = fopen($file,'w'); //以只寫的方式打開文件,指針指向文件開頭
fwrite($handle,$content); //寫入
fclose($handle);//關閉文件
?>

考點分析

文件的讀取/寫入操作,以及延伸出的目錄操作函數,其他文件的操作。

文件相關

打開函數:
fopen()函數
用來打開一個文件,打開時需要指定打開模式
“r” (只讀方式打開,將文件指針指向文件頭)
“r+” (讀寫方式打開,將文件指針指向文件頭)
“w” (寫入方式打開,清除文件內容,如果文件不存在則嘗試創建之)
“w+” (讀寫方式打開,清除文件內容,如果文件不存在則嘗試創建之)
“a” (寫入方式打開,將文件指針指向文件末尾進行寫入,如果文件不存在則嘗試創建之)
“a+” (讀寫方式打開,通過將文件指針指向文件末尾進行寫入來保存文件內容)
“x” (創建一個新的文件並以寫入方式打開,如果文件已存在則返回 FALSE 和一個錯誤)
“x+” (創建一個新的文件並以讀寫方式打開,如果文件已存在則返回 FALSE 和一個錯誤)
“b” (以二進制的方式打開)

寫入函數:
fwrite(file,string,length)
file:指定寫入的文件
string:指定寫入的內容
length:指定寫入的最大字節數(可選)

fputs(file,string,length)
fputs() 函數是 fwrite() 函數的別名。

讀取函數:
string fread ( resource $handle , int $length )
handle:文件系統指針,是典型地由 fopen() 創建的 resource(資源)。
length:規定要讀取的最大字節數。

fgets(file,length)
fgets() 函數從文件指針中讀取一行。
file:必需。規定要讀取的文件。
length:可選。規定要讀取的字節數。默認是 1024 字節。

fgetc(file)
fgetc() 函數從文件指針中讀取一個字符。

關閉函數:
fclose(file)
fclose() 函數關閉一個打開文件。

不需要fopen()打開的函數:
file_get_contents(path)
file_get_contents() 把整個文件讀入一個字符串中。

file_put_contents ( string $filename , mixed $data)
file_put_contents() 函數把一個字符串寫入文件中。

其他:
file(path)
file() 函數把整個文件讀入一個數組中。
數組中的每個元素都是文件中相應的一行,包括換行符在內。

readfile()
readfile() 函數讀取一個文件,並寫入到輸出緩衝。
如果成功,該函數返回從文件中讀入的字節數。如果失敗,該函數返回 FALSE 並附帶錯誤信息。您可以通過在函數名前面添加一個 ‘@’ 來隱藏錯誤輸出。

訪問遠程文件:
在PHP.ini中將allow_url_fopen設置爲On。HTTP協議連接只能使用只讀,FTP協議可以使用只讀、只寫。

目錄相關

名稱相關:
basename(path)
basename() 函數返回路徑中的文件名部分。

dirname(path)
dirname() 函數返回路徑中的目錄部分。

pathinfo(path)
pathinfo() 函數以數組的形式返回文件路徑的信息。

目錄讀取:
opendir(path):
opendir() 函數打開目錄句柄。

readdir(dir_handle):
readdir() 函數返回目錄中下一個文件的文件名。

closedir(dir_handle):
closedir() 函數關閉目錄句柄。

rewinddir(dir_handle);
rewinddir() 函數重置由 opendir() 創建的目錄句柄。

目錄刪除
rmdir(dir)
rmdir() 函數刪除空的目錄。

目錄創建
mkdir(path)
mkdir() 函數創建目錄。

文件大小
filesize(filename)
filesize() 函數返回指定文件的大小(字節數)。

目錄大小
disk_free_space(directory)
disk_free_space() 函數返回目錄中的可用空間

disk_total_space(directory)
disk_total_space() 函數返回指定目錄的磁盤總大小。

文件拷貝
copy(file,to_file)
copy() 函數複製文件。
file:必需。規定要複製的文件。
to_file:必需。規定複製文件的目的地。

刪除文件:
unlink(filename)
unlink() 函數刪除文件。

文件類型
filetype(filename)
filetype() 函數返回指定文件或目錄的類型。

重命名文件或目錄
rename(oldname,newname)
rename() 函數重命名文件或目錄。

文件截取
ftruncate(file,size)
ftruncate() 函數把文件截斷到指定的長度。

文件屬性
file_exists(path)
file_exists() 函數檢查文件或目錄是否存在。

is_readable(file)
is_readable() 函數判斷指定文件名是否可讀。

is_writable(file)
is_writable() 函數判斷指定的文件是否可寫。

is_executable(file)
is_executable() 函數檢查指定的文件是否可執行。

fileatime(filename)
filectime() 函數返回指定文件的上次 inode 修改時間。

fileatime(filename)
fileatime() 函數返回指定文件的上次訪問時間。

filemtime(filename)
filemtime() 函數返回文件內容的上次修改時間。

文件鎖
flock(file,lock)
flock() 函數鎖定或釋放文件。
要取得共享鎖定(讀取的程序),將 lock 設爲 LOCK_SH
要取得獨佔鎖定(寫入的程序),將 lock 設爲 LOCK_EX
要釋放鎖定(無論共享或獨佔),將 lock 設爲 LOCK_UN
如果不希望 flock() 在鎖定時堵塞,則給 lock 加上 LOCK_NB

文件指針
ftell(file)
ftell() 函數在打開文件中的當前位置。返回文件指針的當前位置。

fseek(file,offset)
fseek() 函數在打開的文件中定位。
該函數把文件指針從當前位置向前或向後移動到新的位置,新位置從文件頭開始以字節數度量。

rewind(file)
rewind() 函數將文件指針的位置倒回文件的開頭。

一網打盡

通過PHP函數的方式對目錄進行遍歷,寫出程序

答案:

<?php
/**
 * Created by 冷月小白.
 * 微信公衆號: 學長冷月
 */

//1.打開目錄
//2.讀取目錄當中的文件
//3.如果文件類型是目錄,繼續打開目錄
//4.讀取子目錄文件
//5.如果文件類型是文件,輸出文件名稱

function loopdir($dir)
{
    $handle = opendir($dir);
    while (($file = readdir($handle)) !== false)
    {
        if ($file != '.' && $file != '..')
        {
            echo $file . '<br />';
            if (filetype($dir . '/' . $file) == 'dir')
            {
                loopdir($dir . '/' . $file);
            }
        }
    }
    closedir($handle);
}
loopdir('./');

相關閱讀

php面試筆記(1)-php基礎知識-變量和引用變量
php面試筆記(2)-php基礎知識-常量和數據類型
php面試筆記(3)-php基礎知識-運算符
php面試筆記(4)-php基礎知識-流程控制
php面試筆記(5)-php基礎知識-自定義函數及內部函數考點
php面試筆記(6)-php基礎知識-正則表達式考點
php面試筆記(7)-php基礎知識-文件及目錄處理考點
php面試筆記(9)-php基礎知識-面向對象考點
如果這篇博文有幫助到您,可以幫冷月點一個贊或者加一個關注哦!

歡迎關注我的公衆號:學長冷月,獲得獨家整理的學習資源和日常乾貨推送。
如果您對我的專題內容感興趣,也可以關注我的博客:guoyu7.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章