《PHP和MySQL Web开发》学习之二--数据的存储与检索
??????? 最近這段時間主要將時間和精力花在看《代碼大全》和《Clean Code》上了,今晚操作了一下久違的PHP,現將第二章的主要內容摘要如下。書很久之前就看了,一直沒有寫筆記,突然發現很多語法已經有些生疏,看來學習一門新的語言還是要通過練習,練習再練習。當然,寫筆記的過程也是一個記憶的過程,俗話說:好記心當不得爛筆頭是也。
??????? 存儲數據有兩種基本方法:保存到普通文件,或者保存到數據庫中。
??????? 1.文件處理
???????? 將數據寫入文件的三個步驟:(1)打開這個文件,如果不存在則創建;(2)將數據寫入文件;(3)關閉文件
??????? 從文件中讀取數據的三個步驟:(1)打開這個文件,如果文件不存在則正確的退出;(2)從文件中讀取數據;(3)關閉文件。
??????? 2.打開文件
??????? (1)使用fopen()來打開文件
??????? 如要將一個顧客訂單寫入Bob訂單文件,可以使用如下語句打開該文件:
??????? $fp = fopen("%DOCUMENT_ROOT/../orders/orders.txt", 'w');
??????? 上面代碼中,使用了內置變量$_SERVER['DOCUMENT_ROOT'],指向web服務器文檔樹的根。用".."表示文檔根目錄的父目錄。
??????? 在Unix系統中,根目錄是/,在windows系統中,根目錄是C:\。在Unix環境下,目錄中的間隔符是正斜線(/)。windows平臺下可以使用正斜線或者反斜線,如果使用反斜線,則需要使用轉義字符(轉義字符為反斜線\)。在PHP中很少使用反斜線,因為這樣意味著代碼只能在windows下運行。如果使用正斜線嗎,代碼不需要任何修改就可以在linux下運行。
??????? (2)通過FTP或者HTTP打開文件
??????? 除了打開本地文件進行讀寫之外,還可以使用fopen()函數通過FTP、HTTP或者其它協議來打開文件。在php.ini文件中,可以通過關閉allow_url_fopen指令來禁用這個功能。
??????? 如果使用的文件名是以ftp://開始的,fopen()將建立一個連接到指定服務器的被動模式,并返回一個指向文件開始的指針。
??????? 如果使用的文件名是以http://開始的,fopen()函數將建立一個到指定服務器的HTTP連接,并返回一個指向HTTP響應的指針。
??????? 請注意:URL中的域名不區分大小寫,但是路徑和文件名可能區分大小寫。
??????? (3)打開文件時可能遇到的問題
???????? 打開文件時,常見錯誤時試圖打開一個沒有權限進行讀寫操作的文件。
??????? 任何人都可以寫的目錄和文件是非常危險的,不應該具有可以從web上直接可寫的目錄。
??????? $fp = @fopen("%DOCUMENT_ROOT/../orders/orders.txt", 'w');
??????? 上面代碼中的@可以抑制所有由該函數調用所產生的錯誤。通常在出錯的時候這是一個不錯的方法,但是要在其它地方處理它。
??????? 3.寫文件
??????? 在PHP中寫文件相對簡單,可以使用fwrite()或者fputs()。fputs()是fwrite()的別名函數。可以使用如下方法調用fwrite:
??????? fwrite($fp, $outputstring);
??????? 這個函數用來將$outputstring中的字符串寫入到$fp指向的文件中。
??????? fwrite()函數的一個替換函數是file_put_contents(),其原型是:
??????? int file_put_contents(string filename,
????????????????????????????????????? string data
????????????????????????????????????? [, int flags
????????????????????????????????????? [,resource context]]
??????? )
????????這個函數可以在不需要調用fopen()(或fclose())函數打開要寫的文件之前,將包含在data中的字符串數據寫入到filename所指定的文件中。
??????? (1)fwrite的參數
??????? fwrite的原型如下:
??????? int fwrite(resource handle, string string[, int length])
??????? 第三個參數length是寫入的最大字符數。如果給出這個參數,則將向handle指向的文件中寫入字符串,一直寫到字符串的末尾或者已經寫了length字節才停止。
??????? 4.關閉文件
??????? 使用完文件后要關閉,調用fclose()函數,如下:
??????? fclose($fp);
??????? 5.讀文件
??????? (1)知道何時讀完文件:feof()
????????(2)每次讀取一行數據:fgets(),fgetss()和fgetcsv()
??????? (3)讀取整個文件:readfile(),fpassthru()和file()
??????? (4)讀取一個字符:fgetc()
??????? (5)讀取任意長度:fread()
??????? 6.使用其它有用的文件函數
??????? (1)查看文件是否存在:file_exists()
????????(2)確定文件大小:filesize()
??????? (3)刪除一個文件:unlink()
??????? (4)在文件中定位:將文件指針復位到文件的開始rewind(),fseek()(將文件指針指向某個位置)和ftell()(以字節方式報告文件指針在文件的位置)
??????? 7.文件鎖定
??????? 文件鎖定是通過flock()來實現的。
?????? 8.更好的方式:數據庫管理系統
??????? 普通文件存在的問題:
??????? (1)文件變大時,使用普通文件將變得非常慢
??????? (2)在一個普通文件中查找特定的一個或者一組記錄非常難。
??????? (3)處理并發訪問會遇到問題
??????? (4)不利于在文件中間插入或刪除
????????
?
?
?
?
?
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/superhuake/archive/2011/10/18/2216936.html
總結
以上是生活随笔為你收集整理的《PHP和MySQL Web开发》学习之二--数据的存储与检索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDOJ1540 - Tunnel
- 下一篇: 好用网站推荐