熱門文章

      最新文章

      如何在PHP中操作臨時文件

      發布時間:2021-06-22 15:26:45

      獲取 PHP 的默認臨時創建文件目錄

      學習過 Linux 操作系統的都會知道有一個目錄是 /tmp 目錄( Windows 中一般是:C:\Windows\Temp\ ),它是用來存放系統的一些臨時文件的,所以,這個目錄也叫做臨時文件目錄。很多軟件都會將一些臨時保存的文件放在這個目錄里面,包括一些緩存、一些臨時生成的腳本之類的。PHP 在默認情況下也會將臨時文件目錄指向這個目錄,包括 SESSION 文件之類的臨時文件都會保存在這里。它可以在 php.ini 文件中通過 sys_tmp_dir 進行設置。

      當然,在動態運行的 PHP 程序中,我們也可以通過一個函數來獲得當前的臨時文件目錄。

      1
      2
      print_r(sys_get_temp_dir());
      // /tmp

      創建一個臨時文件

      既然有了臨時文件目錄,PHP 當然也貼心的為我們準備好了直接去創建一個臨時文件的函數。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      $tmpFile = tmpfile();
      fwrite($tmpFile, "I'm tmp file.");
      // ll /tmp
      // vim phpbnAjbE
       
      sleep(10);
       
      fclose($tmpFile);
      // ll /tmp

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

      在調用函數并寫入內容后,我們暫停了十秒。其實就是為了去 /tmp 目錄里看一下這個文件是否生成成功。根據文件創建的時間,我們找到了生成的這個對應的文件。然后在十秒后執行了 fclose() 之后,再次到目錄查看,就會發現文件已經被自動刪除了。

      根據目錄狀態創建一個唯一名稱的臨時文件

      最后,PHP 還為我們提供了一個非常人性化的創建臨時文件的函數。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      $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() 函數是無法指定文件名的,而這個函數則是可以給文件名一個固定的前綴,并保證前綴之后自動生成的文件名部分是唯一的。

      總結

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


      返回頂部
      主站蜘蛛池模板: 亚洲视频一区二区| 亚洲国产成人久久一区久久| 日本精品一区二区三区在线视频一| 麻豆视频一区二区三区| 无码国产精品一区二区免费模式| 日本视频一区在线观看免费| 精品国产福利第一区二区三区| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲愉拍一区二区三区| 久久国产精品亚洲一区二区| 国产一区二区在线观看麻豆| 精品国产免费一区二区| 性盈盈影院免费视频观看在线一区 | 国产亚洲综合一区柠檬导航| 亚洲中文字幕丝袜制服一区| 麻豆视频一区二区三区| 无码人妻一区二区三区精品视频 | 亚洲AV网一区二区三区| 伊人久久大香线蕉AV一区二区| 无码一区二区三区视频| 无码精品人妻一区二区三区漫画 | 日韩社区一区二区三区| 国产一区二区三区露脸| 欧洲精品码一区二区三区免费看| 日韩在线一区二区三区视频| 在线播放精品一区二区啪视频| 欧美人妻一区黄a片| 竹菊影视欧美日韩一区二区三区四区五区 | 中文字幕一区二区三区永久| 中文字幕精品亚洲无线码一区应用 | 精品3d动漫视频一区在线观看| 国产成人av一区二区三区在线观看 | 国产精品一区二区久久精品| 在线精品一区二区三区| 色综合久久一区二区三区| 波多野结衣一区二区三区高清在线| 精品人妻一区二区三区四区在线| 国产精品小黄鸭一区二区三区| 久久久久久免费一区二区三区| 91成人爽a毛片一区二区| 成人欧美一区二区三区在线视频|