PHP檔案操作執行個體分享

來源:互聯網
上載者:User
本文主要和大家分享PHP檔案操作執行個體,即記錄日誌、目錄、檔案的遍曆、上傳、多方法得到副檔名、檔案引用方式、引用函數區別。

1.   檔案建立:fopen()
$file = fopen("test.txt","r");

"r"

唯讀方式開啟,將檔案指標指向檔案頭。

"r+"

讀寫方式開啟,將檔案指標指向檔案頭。

"w"

寫入方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立之。

"w+"

讀寫方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立之。

"a"

寫入方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則嘗試建立之。

"a+"

讀寫方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則嘗試建立之。

2. 檔案開啟關閉:fopen(),fclose()
3. 檔案末尾檢查:feof()
函數檢測是否已到達檔案末尾.
4. 檔案讀取:fread(),file(), file_get_contents(), fgetc(),fgets()
1. fread(file,length)
從檔案指標 file 讀取最多 length 個位元組,length(必須)
2. file_get_contents(file)
將檔案的內容讀入到一個字串中的首選方法
3. file(file)
把整個檔案讀入一個數組中, 數組中的每個單元都是檔案中相應的一行,包括分行符號在內。
4. fgetc(file)
從檔案指標中讀取一個字元
5. fgets(file,length)
從檔案指標中讀取一行, 碰到分行符號(包括在傳回值中)、EOF 或者已經讀取了 length - 1 位元組後停止(要看先碰到那一種情況)。
5. 檔案指標:
fseek(file,offset,whence)
把檔案指標從當前位置向前或向後移動到新的位置,新位置從檔案頭開始以位元組數度量。

whence可選。可能的值:

SEEK_SET - 設定位置等於 offset 位元組。預設。

SEEK_CUR - 設定位置為當前位置加上 offset。

SEEK_END - 設定位置為檔案末尾加上 offset (要移動到檔案尾之前的位置,offset 必須是一個負值)。 fseek($fp,-2, SEEK_END);//移動指標到檔案末尾

ftell() 返迴文件指標的當前位置。
rewind() 移動檔案指標到檔案的開頭。
另:php讀取超大檔案的方法
使用PHP的 fseek 來進行檔案操作
這種方式是最為普遍的方式,它不需要將檔案的內容全部讀入內容,而是直接通過指標來操作,所以效率是相當高效的。

<?php$fp = fopen($file, "r");$pos = 0;$t = " ";$data = "";while (!feof($fp)) {    while ($t != "\n") {        fseek($fp, $pos);        $t = fgetc($fp);        $pos ++;    }    $t = " ";    $data .= fgets($fp);}fclose ($fp);echo $data?>

6. 擷取副檔名:
1. substr(strrchr($filename, '.'), 1);
2. substr($filename, strrpos($filename, '.')+1);
3. end(explode('.', $filename));
4. pathinfo($filename, PATHINFO_EXTENSION); (PHP Filesystem 函數)
7. 目錄與檔案遍曆:

function traverse($path){  $current_dir = opendir($path);    //opendir()返回一個目錄控制代碼,失敗返回false  while(($file = readdir($current_dir)) !==false) {//readdir()返回開啟目錄控制代碼中的一個條目      $sub_dir = $path .DIRECTORY_SEPARATOR(‘/’) . $file;    //構建子目錄路徑if($file == '.' || $file== '..') {          continue;      } else if(is_dir($sub_dir)) {    //如果是目錄,進行遞迴          echo 'Directory ' . $file .':<br>';          traverse($sub_dir);      } else {    //如果是檔案,直接輸出          echo 'File in Directory ' . $path .': ' . $file . '<br>';      }}closedir($current_dir); }//記得開啟後要關閉目錄控制代碼哦
 

8. 檔案鎖定
flock(file,lock,block)

函數鎖定或釋放檔案。若成功,則返回true。若失敗,則返回 false。

Lock 參數可以是以下值之一:

· 要取得共用鎖定定(讀取的程式),將 lock 設為LOCK_SH (share)

· 要取得獨佔鎖定(寫入的程式),將 lock 設為LOCK_EX (exclusive)

· 要釋放鎖定(無論共用或獨佔),將 lock 設為 LOCK_UN

· 如果不希望 flock() 在鎖定時堵塞,則給lock 加上LOCK_NB

block可選。若設定為 1 或 true,則當進行鎖定時阻擋其他進程。

<?php$file = fopen("test.txt","w+");// 排它性的鎖定if (flock($file,LOCK_EX))  {  fwrite($file,"Write something");  // release lock  flock($file,LOCK_UN);  }else  {  echo "Error locking file!";  }fclose($file);?>
共用鎖定與獨佔鎖定的區別:

1.共用鎖定(S鎖):如果事務T對資料A加上共用鎖定後,則其他事務只能對A再加共用鎖定,不能加獨佔鎖定。獲准共用鎖定的事務只能讀資料,不能修改資料。

獨佔鎖定(X鎖):如果事務T對資料A加上獨佔鎖定後,則其他事務不能再對A加任任何類型的封鎖。獲准獨佔鎖定的事務既能讀資料,又能修改資料。

2.共用鎖定下其它使用者可以並發讀取,查詢資料。但不能修改,增加,刪除資料。資源共用.[1]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.