PHP中如何建立暫存檔案?淺析操作臨時檔案方法

青灯夜游
發布: 2023-04-10 17:22:01
轉載
3325 人瀏覽過

這篇文章帶大家了解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/在PHP中操作暫存檔案.php

推薦學習:《PHP影片教學

以上是PHP中如何建立暫存檔案?淺析操作臨時檔案方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:juejin.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!