php檔案基本操作執行個體分享

來源:互聯網
上載者:User


本文主要和大家分享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 必需。規定要讀取的檔案。可以是外部url
      include_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('./data.txt','r');    var_dump($handle); // resoure(3) of type (stream) 得到一個資源類型?>
  • 檔案控制代碼讀函數fread(),fgetc(),fgets(),feof();

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

    • 字串 = fgets(控制代碼, 長度)
      如果在讀取時,先讀到了分行符號,也會終止。也叫讀行函數!典型的邏輯,每行記錄一組資訊,該函數最常用!

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

      <?php    $handle = fopen('./langref.txt','r');    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('鎖定失敗,不能操作檔案');    }    //檔案操作    $str = fgets($handle, 1024);    var_dump($str);    sleep(5);    echo '<br>';    $str = fgets($handle, 1024);    var_dump($str);    flock($handle, LOCK_UN);//解鎖?><?php    //*********指令碼2,想要往檔案裡寫入資訊***********    //嘗試加寫鎖    $lock_result= flock($handle, LOCK_EX);    //判斷鎖定結果    if(!$lock_result){        die('鎖定失敗,不能操作檔案');    }    //檔案操作    $result = fwrite($handle, '123456');    flock($handle, LOCK_UN);//解鎖?>

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

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

    $lock_result = flock($handle, LOCK_EX | LOCK_NB);

解鎖:

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

  • Fclose()自動解鎖!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.