Learning PHP -資料的儲存與檢索

來源:互聯網
上載者:User
Learning PHP -資料的儲存與檢索
儲存資料有兩種基本方法:儲存到普通檔案,或者儲存到資料庫中。
資料寫入:
  • 1、開啟檔案。如果檔案不存在,需要先建立它。
  • 2、將資料寫入這個檔案。
  • 3、關閉這個檔案。

資料讀出:
  • 1、開啟檔案。如果這個檔案不能開,就應該意識到這一點並且正確地推出。
  • 2、從檔案中讀出資料。
  • 3、關閉這個檔案。

選擇檔案模式:
當開啟一個檔案的時候,有以下三種選擇。
  • 1、開啟檔案為了唯讀、唯寫或者讀和寫。
  • 2、如果要寫一個檔案,你可能希望覆蓋已有的檔案內容,或者僅僅將新的資料追加到未見末尾。如果該檔案已經存在,也可以終止程式的執行而不是覆蓋該檔案。
  • 3、如果希望在一個區分了二級制方式和純文字方式的系統上寫一個檔案,還必須指定採用的方式。

函數fopen()支援以上三種方式的組合。

根據伺服器設定不同,可以通過如下三種方式得到主目錄:
  • $_SERVER['DOCUMENT_ROOT']
  • $DOCUMENT_ROOT
  • $HTTP_SERVER_VARS['DOCUMENT_ROOT']

對於表單資料,第一個風格是首選的。
開啟檔案fopen(path,mode)
寫檔案:fwrite($fp, &outputstring)
關閉檔案:fclose($fp)
fopen()函數的檔案模式
  • r 唯讀 讀模式――開啟檔案,從檔案頭開始讀
  • r+ 唯讀 讀寫入模式――開啟檔案,從檔案頭開始讀寫
  • w 唯寫 寫入模式――開啟檔案,從檔案頭開始讀。如果該檔案已經存在,將刪除所有檔案已有內容。如果該文 件不存在,函數將建立這個檔案。
  • x 謹慎寫 寫入模式開啟檔案,從檔案頭開始寫。入如果檔案已經存在,該檔案將不會被開啟,fopen()函數將返回false,而且PHP將產生一個警告。
  • x+ 謹慎寫 讀/寫入模式開啟檔案,從檔案頭開始寫。入如果檔案已經存在,該檔案將不會被開啟,fopen()函數將返回false,而且PHP將產生一個警告。
  • a 追加 追加模式――開啟檔案,如果該檔案已有內容,將從檔案末尾開始追加(寫),如果該檔案不存在,函數將建立這個檔案
  • a+ 追加 追加模式――開啟檔案,如果該檔案已有內容,將從檔案末尾開始追加(寫),如果該檔案不存在,函數將建立這個檔案
  • b 二進位 二進位模式――用於與其他模式進行串連。如果檔案系統能夠區分二進位檔案和文字檔,你可能會使用它。可以獲得最大程度的可移植性。二進位模式是預設的模式。
  • t 文本 用於與其他模式的結合。這個模式只是windows系統下一個選項。

以唯讀模式開啟檔案:fopen()
知道何時讀完檔案:feof()
每次讀取一行資料:fgets()、fgetss()和fgetcsv()
讀取整個檔案:readfile()、fpassthru()和file()
  • 第一種方式是readfile()。readfile($path);調用readfile()函數將開啟這個檔案,並且將檔案內容輸出到標準輸出中,然後再關閉這個檔案。
  • 第二種方式是fpassthru()。要使用這個函數,必須先使用fopen()開啟檔案。然後將檔案指標作為參數傳遞給fpassthru(),這樣就可以把檔案指標所指向的檔案內容發送到標準輸出。然後再將這個檔案關閉。如果讀操作成功,函數返回true,否則返回false。
  • 第三種讀取整個檔案的函數是file().它和readfile一樣。不過它是把結果發送到一個數組中。
  • $filearray = file($path);
  • 第四種選擇是使用file_get_contents()函數。這個函數與readfile()相同,但是該函數將以字串的形式返迴文件內容,而不是將檔案內容回顯到瀏覽器中。

讀取一個字元:fgetc()
while(!feof($fp)){     $char = fgetc($fp);     if(!feof($fp)){          echo ($char == "\n "? "
": $char); }}

讀取任意長度:fread()
讀取一個檔案的最後一種方法是使用fread()函數從檔案中讀取任意長度的位元組。
查看檔案是否存在:file_exists()
確定檔案大小:filesize()
刪除一個檔案:unlink()(PHP中沒有名為delete的函數)
在檔案中定位:rewind()、fseek()和ftell()
rewind()函數可以將指標複位到檔案的開始。
ftell()函數可以以位元組為單位報告檔案指標當前在檔案中的位置。
調用fseek()函數可以將檔案指標fp從whence位置移動offset個位元組。
rewind()函數等價於調用一個具有零位移量的fseek()函數。
檔案的鎖定:
為了避免多個方法同時操作一個檔案,可以使用檔案鎖定的方法。
檔案鎖定是通過flock()函數來實現的。
如果打算使用flock()函數,必須將其添加到所有使用檔案的指令碼中;否則,就沒有任何意義。
flock()的操作值
  • LOCK_SH 讀伺服器用戶端檔案鎖。這意味著檔案可以共用,其他人可以讀該檔案
  • LOCK_EX 寫伺服器用戶端檔案鎖。這是互斥的。該檔案不能被共用。
  • LOCK_UN 釋放已有的鎖定
  • LOCK_NB 防止在請求加鎖時發生阻塞


資料庫管理系統
  • RDBMS提供了比普通檔案更快的資料訪問。
  • RDBMS可以很容易地尋找並檢索滿足特定條件的資料集合。
  • RDBMS具有內建的處理並發訪問的機制。
  • RDBMS可以隨機訪問資料。
  • RDBNS具有內建的許可權系統。


vieworders.php
Bob's Auto Parts - Customer OrdersBob's Auto PartsCustomer OrdersNo orders pending.Please try again later.

";exit;}while (!feof($fp)){$order = fgets($fp,999);echo $order."
";}?>

proccessorder.php
Bob's Auto Parts-Order Results

Bob's Auto Parts

Order Results

Order processed at ".date('H:i, jS F Y')."

";echo "

Your order is as follows:

";$totalqty = 0;$totalqty = $tireqty + $oilqty + $sparkqty;echo "Items ordered: ".$totalqty."
";if($totalqty == 0){ echo "You did not order anything on the previous page!
";}else{if($tireqty > 0){ echo $tireqty." tires
"; }if($oilqty > 0){ echo $oilqty." bottles of oil
"; }if($sparkqty > 0){ echo $sparkqty." spark plugs
"; }}$totalamount = 0.00;define("TIREPRICE", 100);define("OILPRICE", 10);define("SPARKPRICE", 4);$totalamount = $tireqty * TIREPRICE+ $oilqty * OILPRICE+ $sparkqty * SPARKPRICE;$totalamount=number_format($totalamount, 2, '.', ' ');echo "

Total of order is $.$totalamount.

";echo "

Address to ship to is ".$address."

";$outputstring = $date."\t".$tireqty." tires \t".$oilqty." oil\t".$sparkqty." spark plugs\t\$".$totalamount."\t".$address."\n";@ $fp= fopen("$DOCUMENT_ROOT/orders/orders.txt", 'ab');flock($fp, LOCK_EX);if(!$fp){echo "

Your orde could not be processed at this time. Please try again later.

";exit;}fwrite($fp, $outputstring, strlen($outputstring));flock($fp, LOCK_UN);fclose($fp);echo "

Order written.

";?>

參考資料:
PHP&MySQL.Web







  • 聯繫我們

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