如何在PHP中操作臨時檔案

2022-09-25 15:54:14 字數 1844 閱讀 2906

學習過 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() 函式就是用來建立這個臨時檔案的,我們不需要為它指定文www.cppcns.com件名,也不需要為它指定路徑,同時,它建立的檔案是 w+ 型別的,也就是直接就是可讀寫的檔案。當呼叫 fclose() 的時候,這個臨時檔案將自動刪除掉。手冊中說使用這個函式建立的檔案在指令碼執行結束後也會自動刪除,但是在測試後發現指令碼結束時檔案並不會刪除。

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

最後,php 還為我們提供了乙個非常人性化的建立臨時檔案的函式。

$tmpfile = tempnam('/users/zhangyue/mydoc/www.cppcns.com部落格文章/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');www.cppcns.com

$f = fopen($tmpfile, "w");

fwrite($f, "i'm tmp file.");

// ll /etc

// ll /tmp

// vim testtmptunucm

tempna程式設計客棧m() 函式,它會根據目錄的狀態去生成乙個唯一名稱的臨時檔案。什麼叫根據目錄狀態呢?從上面的**注釋中可以看出,第二段的 /etc 目錄一般是 root 許可權的目錄,沒有 root 帳戶許可權的話我們是無法建立修改檔案的。如果是這種沒有許可權的目錄,或者是壓根就不存在的目錄,tempnam() 函式就會將檔案生成到臨時檔案目錄中去。如果目錄是正常存在並且可以寫的,就像第一段**一樣,檔案就會正常在這個目錄進行建立。

tempnam() 函式的第二個引數是指定生成檔名的字首。tmpfile() 函式是無法指定檔名的,而這個函式則是可以給檔名乙個固定的字首,並保證字首之後自動生成的檔名部分是唯一的。

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

測試**:

如何使用臨時檔案

python為我們提供了乙個標準庫來處理臨時檔案,所誤謂臨時檔案就是寫在硬碟上,關機就刪除,臨時檔案分為有名字的和無名字的,分別對應為 temporaryfile namedtempporaryfile,這裡不討論python2.x寫法,form tempfile import temporaryf...

bash 臨時檔案

1.臨時檔案目錄 tmp 使用者可以隨時隨地利用mktemp命令建立臨時檔案與 tmp目錄,這個目錄在每次系統啟動時都會被清空,因此裡面的檔案都是臨時使用的 不能永久儲存 用完就不管的。任何賬戶都有權在 tmp目錄下建立臨時檔案,完整的讀寫許可權全都給建立它的屬主,並且其它賬戶無權訪問它。2.使用m...

android臨時檔案

activity 1.啟動乙個新的activity 會呼叫oncreate onstart onresume 2.onpause protected void oncreate protected void onstart 當activity被使用者看到時,呼叫 protected void onr...