Es gibt zwei grundlegende Möglichkeiten, Daten zu speichern: Speichern in einer normalen Datei oder Speichern in einer Datenbank.
Daten schreiben:
1. Wenn die Datei nicht existiert, muss sie zuerst erstellt werden.
2. Daten in diese Datei schreiben.
3. Schließen Sie diese Datei.
Daten lesen:
Öffnen Sie die Datei. Wenn die Datei nicht geöffnet werden kann, sollten Sie sich dessen bewusst sein und den Vorgang korrekt beenden.
2. Daten aus der Datei lesen.
3. Schließen Sie diese Datei.
Dateimodus auswählen:
Beim Öffnen einer Datei gibt es die folgenden drei Optionen.
1. Öffnen Sie die Datei nur zum Lesen, nur zum Schreiben oder zum Lesen und Schreiben.
2. Wenn Sie eine Datei schreiben möchten, möchten Sie möglicherweise den vorhandenen Dateiinhalt überschreiben oder einfach neue Daten an das unsichtbare Ende anhängen. Wenn die Datei bereits vorhanden ist, kann die Programmausführung abgebrochen werden, anstatt die Datei zu überschreiben.
3. Wenn Sie eine Datei auf einem System schreiben möchten, das zwischen sekundärem Kopiermodus und Nur-Text-Modus unterscheidet, müssen Sie auch die zu verwendende Methode angeben.
Die Funktion fopen() unterstützt die Kombination der oben genannten drei Methoden.
Abhängig von den Servereinstellungen kann das Dokumentstammverzeichnis auf die folgenden drei Arten abgerufen werden:
$_SERVER['DOCUMENT_ROOT']
$DOCUMENT_ROOT
$HTTP_SERVER_VARS['DOCUMENT_ROOT']
Für Formulardaten wird der erste Stil bevorzugt.
Datei öffnen fopen(path,mode)
Datei schreiben: fwrite($fp, &outputstring)
Datei schließen: fclose($fp)
Dateimodus der Funktion fopen()
r Schreibgeschützter Lesemodus – Datei öffnen, vom Anfang der Datei lesen
r Schreibgeschützter Lese- und Schreibmodus – Datei öffnen, vom Anfang der Datei lesen und schreiben
nur im Write-Write-Modus – öffnen Sie die Datei und lesen Sie vom Anfang der Datei an. Wenn die Datei bereits vorhanden ist, werden alle vorhandenen Inhalte der Datei gelöscht. Wenn die Datei nicht vorhanden ist, erstellt die Funktion die Datei.
x Mit Vorsicht schreiben Öffnen Sie die Datei im Schreibmodus und beginnen Sie mit dem Schreiben vom Anfang der Datei. Wenn die Datei bereits existiert, wird die Datei nicht geöffnet, die Funktion fopen() gibt false zurück und PHP generiert eine Warnung.
x Mit Vorsicht schreiben Öffnen Sie die Datei im Lese-/Schreibmodus und beginnen Sie mit dem Schreiben vom Anfang der Datei. Wenn die Datei bereits existiert, wird die Datei nicht geöffnet, die Funktion fopen() gibt false zurück und PHP generiert eine Warnung.
a Anhängen Anhängemodus – Öffnen Sie die Datei. Wenn die Datei bereits Inhalt hat, wird dieser am Ende der Datei angehängt (geschrieben). Wenn die Datei nicht vorhanden ist, erstellt die Funktion die Datei
a Anhängen Anhängemodus – Öffnen Sie die Datei. Wenn die Datei bereits Inhalt hat, wird das Anhängen (Schreiben) am Ende der Datei gestartet. Wenn die Datei nicht vorhanden ist, erstellt die Funktion die Datei
b Binär Binärmodus – wird verwendet. Verbindung mit anderen Modi herstellen. Wenn das Dateisystem zwischen Binärdateien und Textdateien unterscheiden kann, können Sie es verwenden. Maximale Portabilität wird erreicht. Der Binärmodus ist der Standardmodus.
t-Text wird in Kombination mit anderen Modi verwendet. Dieser Modus ist nur eine Option unter Windows.
Öffnen Sie die Datei im schreibgeschützten Modus: fopen()
Erfahren Sie, wann Sie mit dem Lesen der Datei fertig sind: feof()
Lesen Sie jeweils eine Datenzeile: fgets( ), fgetss() und fgetcsv()
Die gesamte Datei lesen: readfile(), fpassthru() und file()
Der erste Weg ist readfile(). readfile($path); Durch Aufrufen der Funktion readfile() wird die Datei geöffnet, der Dateiinhalt auf der Standardausgabe ausgegeben und die Datei dann geschlossen.
Der zweite Weg ist fpassthru(). Um diese Funktion nutzen zu können, müssen Sie die Datei zunächst mit fopen() öffnen. Übergeben Sie dann den Dateizeiger als Parameter an fpassthru(), sodass der Inhalt der Datei, auf die der Dateizeiger zeigt, an die Standardausgabe gesendet werden kann. Schließen Sie dann die Datei. Wenn der Lesevorgang erfolgreich ist, gibt die Funktion „true“ zurück, andernfalls gibt sie „false“ zurück.
Die dritte Funktion, die die gesamte Datei liest, ist file(). Sie ist dasselbe wie readfile. Aber es sendet das Ergebnis an ein Array.
$filearray = file($path);
Die vierte Option ist die Verwendung der Funktion file_get_contents(). Diese Funktion ist mit readfile() identisch, aber diese Funktion gibt den Dateiinhalt als Zeichenfolge zurück, anstatt den Dateiinhalt an den Browser zurückzugeben.
Ein Zeichen lesen: fgetc()
while(!feof($fp)){ $char = fgetc($fp); if(!feof($fp)){ echo ($char == "\n "? "<br /> ": $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
<?php $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"]; ?> <html> <head> <title>Bob's Auto Parts - Customer Orders</title> </head> <body> <h1]]>Bob's Auto Parts</h1> <h2]]>Customer Orders</h2> <?php @$fp = fopen("$DOCUMENT_ROOT/orders/orders.txt", 'rb'); if(!$fp){ echo "<p><strong>No orders pending.Please try again later.</strong></p>"; exit; } while (!feof($fp)){ $order = fgets($fp,999); echo $order."<br />"; } ?> </body> </html>
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'); ?> <html> <head> <title>Bob's Auto Parts-Order Results</title> </head> <body> <h1>Bob's Auto Parts</h1> <h2>Order Results</h2> <?php echo "<p>Order processed at ".date('H:i, jS F Y')."</p>"; echo "<p>Your order is as follows: </p>"; $totalqty = 0; $totalqty = $tireqty + $oilqty + $sparkqty; echo "Items ordered: ".$totalqty."<br />"; if($totalqty == 0){ echo "You did not order anything on the previous page!<br />"; }else{ if($tireqty > 0){ echo $tireqty." tires<br />"; } if($oilqty > 0){ echo $oilqty." bottles of oil<br />"; } if($sparkqty > 0){ echo $sparkqty." spark plugs<br />"; } } $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 "<p>Total of order is $.$totalamount.</p>"; echo "<p>Address to ship to is ".$address."</p>"; $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 "<p><strong>Your orde could not be processed at this time. Please try again later.</strong></p></body></html>"; exit; } fwrite($fp, $outputstring, strlen($outputstring)); flock($fp, LOCK_UN); fclose($fp); echo "<p>Order written.</p>"; ?> </body> </html>