php檔案基本操作實例分享

小云云
發布: 2023-03-21 18:50:01
原創
1104 人瀏覽過


本文主要和大家分享php檔案基本操作實例,希望能幫助大家,首先我們先和大家分享php讀寫基本操作。

讀取與寫入基本操作

  • #寫入檔案函數:file_put_contents()

    • FILE_USE_INCLUDE_PATH : 將檢查filename 副本的內建路徑

    • LOCK_EX : 將鎖定檔案

    • #FILE_APPEND : 將移至檔案末端。否則,將會清除檔案的內容

    • 語法:

      int file_put_contents(file,data,mode,context)

      #參數 描述
      #file 必要。規定要寫入資料的文件。如果文件不存在,則建立一個新文件。
      data 可選。規定要寫入文件的資料。可以是字串、一維數組或資料流。
      mode 可選。如何開啟/寫入檔案。可能值:FILE_USE_INCLUDE_PATH 、 FILE_APPEND 、 LOCK_EX
      context 可選。規定文件句柄的環境。 context 是一套可以修改流的行為的選項。若使用 null,則忽略。
    • 傳回值:函數將傳回寫入到檔案內資料的位元組數。

    • mode參數說明

    • 與依序呼叫 fopen(),fwrite() 以及 fclose() 函數一樣。

  • 讀取檔案函數:file_get_contents()

    • #語法:

      string file_put_contents (path,include_path,context,start,max_length)

      ##描述##path必要。規定要讀取的文件。可以是外部urlinclude_path可選。如果也想在 include_path 中搜尋檔案的話,可以將該參數設為 “1”。 context可選。規定文件句柄的環境。 start可選。規定在文件中開始讀取的位置。此參數是 PHP 5.1 新加的。 max_length可選。規定讀取的位元組數。此參數是 PHP 5.1 新加的。
      參數
      ###
    • 傳回值:讀取到的字串。

其它常用檔案函數

  • #Unlink()  刪除檔案

  • Rename( )  檔案移動(重新命名)

  • Filesize()  檔案大小

  • File_exists()  檔案是否存在

  • #Filemtime()  檔案的最後修改時間!

檔案句柄讀取寫入操作

大多數的檔案讀寫,使用函數:File_put_contents, file_get_contents完成。
 少數,特別情況,以上兩個函數不好用。
 典型的就是,文件過大!只能一部分一部分的操作!
 基本單位都是位元組:

  • fopen() 函數開啟檔案或 URL。

    如果開啟失敗,本函數傳回 FALSE。
    開啟檔案句柄,PHP程式與檔案間資料通路!
    需要 檔案位址  和  開啟模式 兩個參數!

    開啟模式:指定開啟該檔案後,需要執行什麼動作!如下的模式可以選擇:

    • r:    read, 讀取模式。

    • w:    write, 寫入操作,清空寫入。

    • a:    append,寫入操作,追加寫。

    • x:    新寫入,只能新建檔案操作!就是寫入操作,與w類似

    • +擴充模式:擴充的操作,都可以完成讀寫操作。

      <?php
          $handle = fopen(&#39;./data.txt&#39;,&#39;r&#39;);
          var_dump($handle); // resoure(3) of type (stream) 得到一个资源类型
      ?>
      登入後複製
  • 檔案句柄讀取函數fread(),fgetc(),fgets(),feof();

    • 一個字節資料= fgetc(句柄); //多字節字元情況下亂碼
      每當讀取到一個字節,將檔案指標向前移動一個位元組!句柄操作中,依賴的就是 檔案指標!

    • 字串 = fgets(句柄, 長度)
      如果在讀取時,先讀到了換行符,也會終止。也叫讀行函數!典型的邏輯,每行記錄一組信息,該函數最常用!

    • feof()判斷是否達到檔案結尾
      讀取檔案全部資訊範例:

      <?php
          $handle = fopen(&#39;./langref.txt&#39;,&#39;r&#39;);
          while (! feof($handle)) {
              $line = fgets($handle,1024);
              echo $line . "</br>";
          }
      ?>
      登入後複製
    • 字串= fread(handle,長度)
      依據長度讀取內容,與fgets區別,不受換行符的限制
      唯一一個限制為:最大的長度不能超過8192!

  • 檔案句柄寫函數fwrite($handle,內容)

  • 關閉句柄fclose($handle)

  • 指標運算子

    • fseek(句柄, 位置),定位設定指針,位置從0開始,遞增!

    • ftell(句柄),取得指標位置!

檔案並發操作(檔案鎖定)

#預設的,PHP的檔案操作函數,不是阻塞狀態。自由操作狀態。所以並發操作文件的時候容易導致出錯,當需要,一個腳本操作而需要阻塞另外的腳本操作時,就需要用到文件鎖。

鎖定操作流程:
先加鎖,偵測鎖定是否加成功,如果成功再使用!

鎖定類型:

  • #讀取鎖定:   s-lock(share-lock)共享鎖定,讀取操作前,期望增加的鎖定。導致,允許並發讀,阻塞額外的寫入操作。

  • 寫入鎖定:   x-lock(exclusive-lock)排他鎖,獨佔鎖,寫入作業前,嘗試新增的鎖定型別。導致,其他腳本不能讀也不能寫。

  • 意向鎖定:所有的操作資源的腳本都遵循一個約定來使用檔案鎖定(約定)。

flock($handle,鎖定類型);
類型:

  • LOCK_SH   讀取鎖定

  • #LOCK_EX   寫鎖

  • LOCK_UN   解鎖

    <?php
        //*********脚本1,想要读取文件信息***********
        //尝试加读锁
        $lock_result= flock($handle, LOCK_SH);
        //判断锁定结果
        if(!$lock_result){
            die(&#39;锁定失败,不能操作文件&#39;);
        }
        //文件操作
        $str = fgets($handle, 1024);
        var_dump($str);
    
        sleep(5);
        echo &#39;<br>&#39;;
        $str = fgets($handle, 1024);
        var_dump($str);
        flock($handle, LOCK_UN);//解锁
    ?>
    
    <?php
        //*********脚本2,想要往文件里写入信息***********
        //尝试加写锁
        $lock_result= flock($handle, LOCK_EX);
        //判断锁定结果
        if(!$lock_result){
            die(&#39;锁定失败,不能操作文件&#39;);
        }
        //文件操作
        $result = fwrite($handle, &#39;123456&#39;);
        flock($handle, LOCK_UN);//解锁
    ?>
    登入後複製

    同事執行的情況下,上述腳本2需要等待(被阻塞狀態)腳本1執行完成才會執行,強調,一定要判斷鎖是否添加成功

    可以透過LOCK_NB來在鎖定失敗時,不阻塞:

    $lock_result = flock($handle, LOCK_EX | LOCK_NB);
    登入後複製

解鎖:

  • Flock($handle, LOCK_UN)來強制解鎖,

  • Fclose()自動解鎖!

相關推薦:

PHP檔案操作實例分享

php檔案上傳基礎入門

php檔案上傳簡單實例分享

以上是php檔案基本操作實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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