天天看點

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() 函數傳回指定檔案的上次通路時間。

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 . '
';
            if (filetype($dir . '/' . $file) == 'dir')
            {
                loopdir($dir . '/' . $file);
            }
        }
    }
    closedir($handle);}loopdir('./');           

相關閱讀

php