亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    PHP中如何創(chuàng)建臨時(shí)文件?淺析操作臨時(shí)文件方法

    本篇文章帶大家了解一下PHP中的臨時(shí)文件,介紹一下獲取默認(rèn)臨時(shí)創(chuàng)建文件目錄、創(chuàng)建臨時(shí)文件的方法,希望對(duì)大家有所幫助!

    PHP中如何創(chuàng)建臨時(shí)文件?淺析操作臨時(shí)文件方法

    關(guān)于文件相關(guān)的操作,想必大家已經(jīng)非常了解了,在將來(lái)我們刷到手冊(cè)中相關(guān)的文件操作函數(shù)時(shí)也會(huì)進(jìn)行詳細(xì)的講解。今天,我們先來(lái)了解一下在 PHP 中關(guān)于臨時(shí)文件相關(guān)的一些內(nèi)容。

    獲取 PHP 的默認(rèn)臨時(shí)創(chuàng)建文件目錄

    學(xué)習(xí)過(guò) Linux 操作系統(tǒng)的都會(huì)知道有一個(gè)目錄是 /tmp 目錄( Windows 中一般是:C:WindowsTemp ),它是用來(lái)存放系統(tǒng)的一些臨時(shí)文件的,所以,這個(gè)目錄也叫做臨時(shí)文件目錄。很多軟件都會(huì)將一些臨時(shí)保存的文件放在這個(gè)目錄里面,包括一些緩存、一些臨時(shí)生成的腳本之類(lèi)的。PHP 在默認(rèn)情況下也會(huì)將臨時(shí)文件目錄指向這個(gè)目錄,包括 SESSION 文件之類(lèi)的臨時(shí)文件都會(huì)保存在這里。它可以在 php.ini 文件中通過(guò) sys_tmp_dir 進(jìn)行設(shè)置。

    當(dāng)然,在動(dòng)態(tài)運(yùn)行的 PHP 程序中,我們也可以通過(guò)一個(gè)函數(shù)來(lái)獲得當(dāng)前的臨時(shí)文件目錄。

    print_r(sys_get_temp_dir()); // /tmp

    創(chuàng)建一個(gè)臨時(shí)文件

    既然有了臨時(shí)文件目錄,PHP 當(dāng)然也貼心的為我們準(zhǔn)備好了直接去創(chuàng)建一個(gè)臨時(shí)文件的函數(shù)。

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

    tmpfile() 函數(shù)就是用來(lái)創(chuàng)建這個(gè)臨時(shí)文件的,我們不需要為它指定文件名,也不需要為它指定路徑,同時(shí),它創(chuàng)建的文件是 w+ 類(lèi)型的,也就是直接就是可讀寫(xiě)的文件。當(dāng)調(diào)用 fclose() 的時(shí)候,這個(gè)臨時(shí)文件將自動(dòng)刪除掉。手冊(cè)中說(shuō)使用這個(gè)函數(shù)創(chuàng)建的文件在腳本運(yùn)行結(jié)束后也會(huì)自動(dòng)刪除,但是在測(cè)試后發(fā)現(xiàn)腳本結(jié)束時(shí)文件并不會(huì)刪除。

    在調(diào)用函數(shù)并寫(xiě)入內(nèi)容后,我們暫停了十秒。其實(shí)就是為了去 /tmp 目錄里看一下這個(gè)文件是否生成成功。根據(jù)文件創(chuàng)建的時(shí)間,我們找到了生成的這個(gè)對(duì)應(yīng)的文件。然后在十秒后執(zhí)行了 fclose() 之后,再次到目錄查看,就會(huì)發(fā)現(xiàn)文件已經(jīng)被自動(dòng)刪除了。

    根據(jù)目錄狀態(tài)創(chuàng)建一個(gè)唯一名稱的臨時(shí)文件

    最后,PHP 還為我們提供了一個(gè)非常人性化的創(chuàng)建臨時(shí)文件的函數(shù)。

    $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目錄沒(méi)有寫(xiě)權(quán)限 $tmpFile = tempnam('/etc', 'testtmp'); $f = fopen($tmpFile, "w"); fwrite($f, "I'm tmp file."); // ll /etc // ll /tmp // vim testtmpTUNucM

    tempnam() 函數(shù),它會(huì)根據(jù)目錄的狀態(tài)去生成一個(gè)唯一名稱的臨時(shí)文件。什么叫根據(jù)目錄狀態(tài)呢?從上面的代碼注釋中可以看出,第二段的 /etc 目錄一般是 root 權(quán)限的目錄,沒(méi)有 root 帳戶權(quán)限的話我們是無(wú)法創(chuàng)建修改文件的。如果是這種沒(méi)有權(quán)限的目錄,或者是壓根就不存在的目錄,tempnam() 函數(shù)就會(huì)將文件生成到臨時(shí)文件目錄中去。如果目錄是正常存在并且可以寫(xiě)的,就像第一段代碼一樣,文件就會(huì)正常在這個(gè)目錄進(jìn)行創(chuàng)建。

    tempnam() 函數(shù)的第二個(gè)參數(shù)是指定生成文件名的前綴。tmpfile() 函數(shù)是無(wú)法指定文件名的,而這個(gè)函數(shù)則是可以給文件名一個(gè)固定的前綴,并保證前綴之后自動(dòng)生成的文件名部分是唯一的。

    總結(jié)

    又發(fā)現(xiàn)了這幾個(gè)非常好玩的函數(shù),不管是做為臨時(shí)緩存還是進(jìn)行一些文件的創(chuàng)建,這兩個(gè)臨時(shí)文件操作的函數(shù)都非常有用。在日后的開(kāi)發(fā)中我們可以多多嘗試使用這樣的函數(shù),或許它們能夠?yàn)槲覀儙?lái)不少的生產(chǎn)力提升。

    測(cè)試代碼:https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/在PHP中操作臨時(shí)文件.php

    推薦學(xué)習(xí):《PHP視頻教程》

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)