首頁 >後端開發 >PHP問題 >在PHP中如何操作暫存文件

在PHP中如何操作暫存文件

醉折花枝作酒筹
醉折花枝作酒筹轉載
2021-05-31 09:34:062309瀏覽

本篇文章為大家介紹一下在PHP中如何操作暫存檔案的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

在PHP中如何操作暫存文件

關於文件相關的操作,想必大家已經非常了解了,在將來我們刷到手冊中相關的文件操作函數時也會進行詳細的講解。今天,讓我們先來了解在 PHP 中關於臨時檔案相關的一些內容。

取得PHP 的預設暫存檔案目錄

#學習過Linux 作業系統的都會知道有目錄是/tmp 目錄( Windows 中一般是:C:\Windows\Temp\ ),它是用來存放系統的一些暫存檔案的,所以,這個目錄也叫做暫存檔案目錄。很多軟體都會將一些暫時儲存的檔案放在這個目錄裡面,包括一些快取、一些臨時產生的腳本之類的。 PHP 在預設情況下也會將暫存檔案目錄指向這個目錄,包括 SESSION 檔案之類的暫存檔案都會保存在這裡。它可以在 php.ini 檔案中透過 sys_tmp_dir 進行設定。

當然,在動態運行的 PHP 程式中,我們也可以透過一個函數來取得目前的暫存檔案目錄。

print_r(sys_get_temp_dir());
// /tmp

建立一個暫存檔案

既然有了暫存檔案目錄,PHP 當然也貼心的為我們準備好了直接去建立一個暫存檔案的函數。

$tmpFile = tmpfile();
fwrite($tmpFile, "I'm tmp file.");
// ll /tmp
// vim phpbnAjbE

sleep(10);

fclose($tmpFile);
// ll /tmp

tmpfile() 函數就是用來建立這個暫存檔案的,我們不需要為它指定檔案名,也不需要為它指定路徑,同時,它所建立的檔案是w 類型的,也就是直接就是可讀寫的文件。當呼叫 fclose() 的時候,這個臨時檔案會自動刪除掉。手冊中說使用這個函數建立的檔案在腳本運行結束後也會自動刪除,但測試後發現腳本結束時檔案並不會刪除。

在呼叫函數並寫入內容後,我們暫停了十秒。其實就是為了去 /tmp 目錄裡看一下這個檔案是否產生成功。根據檔案建立的時間,我們找到了產生的這個對應的檔案。然後在十秒鐘後執行了 fclose() 之後,再次到目錄查看,就會發現檔案已經被自動刪除了。

根據目錄狀態建立一個唯一名稱的暫存檔案

最後,PHP 也為我們提供了一個非常人性化的建立臨時檔案的函數。

$tmpFile = tempnam('/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202006/source', 'testtmp');
$f = fopen($tmpFile, "w");
fwrite($f, "I'm tmp file.");
// ll /tmp
// vim testtmpH7bptZ

// etc目录没有写权限
$tmpFile = tempnam('/etc', 'testtmp');
$f = fopen($tmpFile, "w");
fwrite($f, "I'm tmp file.");
// ll /etc
// ll /tmp
// vim testtmpTUNucM

tempnam() 函數,它會根據目錄的狀態去產生一個唯一名稱的暫存檔案。什麼叫根據目錄狀態呢?從上面的程式碼註解可以看出,第二段的 /etc 目錄一般是 root 權限的目錄,沒有 root 帳號權限的話我們是無法建立修改檔案的。如果是這種沒有權限的目錄,或是壓根就不存在的目錄,tempnam() 函數就會將檔案產生到暫存檔案目錄中去。如果目錄是正常存在並且可以寫的,就像第一段程式碼一樣,檔案就會正常在這個目錄進行建立。

tempnam() 函數的第二個參數是指定產生檔案名稱的前綴。 tmpfile() 函數是無法指定檔案名稱的,而這個函數則是可以給檔案名稱一個固定的前綴,並保證前綴之後自動產生的檔案名稱部分是唯一的。

總結

又發現了這幾個非常好玩的函數,不管是做為臨時快取還是進行一些檔案的創建,這兩個臨時檔案操作的函數都非常有用。在日後的開發中我們可以多嘗試使用這樣的函數,或許它們能夠為我們帶來不少的生產力提升。

測試程式碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%9C%A8PHP%E4%B8%AD%E6%93%8D%E4%BD%9C%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6.php

推薦學習:php影片教學

#

以上是在PHP中如何操作暫存文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除