Learning PHP 資料的儲存與檢索

2021-09-01 19:20:56 字數 4936 閱讀 7514

[b]儲存資料有兩種基本方法:儲存到普通檔案,或者儲存到資料庫中。[/b]

[b]資料寫入:[/b]

[list]

[*]1、開啟檔案。如果檔案不存在,需要先建立它。

[*]2、將資料寫入這個檔案。

[*]3、關閉這個檔案。

[/list]

[b]資料讀出:[/b]

[list]

[*]1、開啟檔案。如果這個檔案不能開,就應該意識到這一點並且正確地推出。

[*]2、從檔案中讀出資料。

[*]3、關閉這個檔案。

[/list]

選擇檔案模式:

當開啟乙個檔案的時候,有以下三種選擇。

[list]

[*]1、開啟檔案為了唯讀、只寫或者讀和寫。

[*]2、如果要寫乙個檔案,你可能希望覆蓋已有的檔案內容,或者僅僅將新的資料追加到未見末尾。如果該檔案已經存在,也可以終止程式的執行而不是覆蓋該檔案。

[*]3、如果希望在乙個區分了二級制方式和純文字方式的系統上寫乙個檔案,還必須指定採用的方式。

[/list]

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

[b]根據伺服器設定不同,可以通過如下三種方式得到文件根目錄:[/b]

對於表單資料,第乙個風格是首選的。

開啟檔案[b]fopen(path,mode)[/b]

寫檔案:[b]fwrite($fp, &outputstring)[/b]

關閉檔案:[b]fclose($fp)[/b]

[b]fopen()函式的檔案模式[/b]

[list]

[*]r 唯讀 讀模式——開啟檔案,從檔案頭開始讀

[*]r+ 唯讀 讀寫模式——開啟檔案,從檔案頭開始讀寫

[*]w 只寫 寫模式——開啟檔案,從檔案頭開始讀。如果該檔案已經存在,將刪除所有檔案已有內容。如果該文 件不存在,函式將建立這個檔案。

[*]x 謹慎寫 寫模式開啟檔案,從檔案頭開始寫。入如果檔案已經存在,該檔案將不會被開啟,fopen()函式將返回false,而且php將產生乙個警告。

[*]x+ 謹慎寫 讀/寫模式開啟檔案,從檔案頭開始寫。入如果檔案已經存在,該檔案將不會被開啟,fopen()函式將返回false,而且php將產生乙個警告。

[*]a 追加 追加模式——開啟檔案,如果該檔案已有內容,將從檔案末尾開始追加(寫),如果該檔案不存在,函式將建立這個檔案

[*]a+ 追加 追加模式——開啟檔案,如果該檔案已有內容,將從檔案末尾開始追加(寫),如果該檔案不存在,函式將建立這個檔案

[*]b 二進位制 二進位制模式——用於與其他模式進行連線。如果檔案系統能夠區分二進位制檔案和文字檔案,你可能會使用它。可以獲得最大程度的可移植性。二進位制模式是預設的模式。

[*]t 文字 用於與其他模式的結合。這個模式只是windows系統下乙個選項。

[/list]

以唯讀模式開啟檔案:[b]fopen()[/b]

知道何時讀完檔案:[b]feof()[/b]

每次讀取一行資料:[b]fgets()[/b]、[b]fgetss()[/b]和[b]fgetcsv() [/b]

讀取整個檔案:[b]readfile()[/b]、[b]fpassthru()[/b]和[b]file()[/b]

[list]

[*]第一種方式是readfile()。readfile($path);呼叫readfile()函式將開啟這個檔案,並且將檔案內容輸出到標準輸出中,然後再關閉這個檔案。

[*]第二種方式是fpassthru()。要使用這個函式,必須先使用fopen()開啟檔案。然後將檔案指標作為引數傳遞給fpassthru(),這樣就可以把檔案指標所指向的檔案內容傳送到標準輸出。然後再將這個檔案關閉。如果讀操作成功,函式返回true,否則返回false。

[*]第三種讀取整個檔案的函式是file().它和readfile一樣。不過它是把結果傳送到乙個陣列中。

$filearray = file($path);

[*]第四種選擇是使用file_get_contents()函式。這個函式與readfile()相同,但是該函式將以字串的形式返回檔案內容,而不是將檔案內容回顯到瀏覽器中。

[/list]

讀取乙個字元:[b]fgetc()[/b]

while(!feof($fp))

}

讀取任意長度:f[b]read()[/b]

讀取乙個檔案的最後一種方法是使用fread()函式從檔案中讀取任意長度的位元組。

檢視檔案是否存在:[b]file_exists()[/b]

確定檔案大小:[b]filesize()[/b]

刪除乙個檔案:[b]unlink()[/b](php中沒有名為delete的函式)

在檔案中定位:[b]rewind()[/b]、[b]fseek()[/b]和[b]ftell()[/b]

[b]rewind()[/b]函式可以將指標復位到檔案的開始。

[b]ftell()[/b]函式可以以位元組為單位報告檔案指標當前在檔案中的位置。

呼叫[b]fseek()[/b]函式可以將檔案指標fp從whence位置移動offset個位元組。

[b]rewind()[/b]函式等價於呼叫乙個具有零偏移量的fseek()函式。

[b]檔案的鎖定:[/b]

為了避免多個方法同時操作乙個檔案,可以使用檔案鎖定的方法。

檔案鎖定是通過flock()函式來實現的。

如果打算使用flock()函式,必須將其新增到所有使用檔案的指令碼中;否則,就沒有任何意義。

flock()的操作值

[list]

[*]lock_sh 讀操作鎖定。這意味著檔案可以共享,其他人可以讀該檔案

[*]lock_ex 寫操作鎖定。這是互斥的。該檔案不能被共享。

[*]lock_un 釋放已有的鎖定

[*]lock_nb 防止在請求加鎖時發生阻塞

[/list]

[b]資料庫管理系統[/b]

[list]

[*]rdbms提供了比普通檔案更快的資料訪問。

[*]rdbms可以很容易地查詢並檢索滿足特定條件的資料集合。

[*]rdbms具有內建的處理併發訪問的機制。

[*]rdbms可以隨機訪問資料。

[*]rdbns具有內建的許可權系統。

[/list]

vieworders.php

<?php

$document_root = $_server["document_root"];

?>

<?php

@$fp = fopen("$document_root/orders/orders.txt", 'rb');

if(!$fp)

while (!feof($fp))

?>

proccessorder.php

<?php

$tireqty = $_post['$tireqty'];

$oilqty = $_post['$oilqty'];

$sparkqty = $_post['$sparkqty'];

$address = $_post['address'];

$document_root = $_server['document_root'];

$date = date('h:i, js f y');

?>

<?php

echo "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)else

if($oilqty > 0)

if($sparkqty > 0)

}$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)

fwrite($fp, $outputstring, strlen($outputstring));

flock($fp, lock_un);

fclose($fp);

echo "order written.

";?>

sharedpreferences資料儲存

例項134 使用sharedpreferences儲存使用者輸入的使用者名稱和密碼,並在第二個activity中顯示 sharedpreferences 類供開發人員儲存和獲取基本資料型別的鍵值對,該類主要用於基本型別,如booleans,floats,ints,longs,strings。在應用程...

Hyperledger Fabric資料儲存結構

原文 hyperledger fabric支援多鏈。每個鏈對應一套賬本。所以區塊鏈每個peer節點會維護多套賬本。每個超級賬本包含以下元素 每個peer節點會維護4個db,它們分別是 如下圖 因只展示了單鏈的資料儲存情況,故idstore未在圖中展示 fabric db.png 其中,世界狀態和賬本...

SharedPreferences資料儲存

1 23 android orientation vertical 4 android layout width fill parent 5 android layout height fill parent 6 78 android id id textview01 9 android layou...