PHP和MySQL開發(fā)の 第二章數(shù)據(jù)的存儲與檢索

第二章 數(shù)據(jù)的存儲與檢索

1.關(guān)于時區(qū)的設(shè)置

  • PHP5開始都需要自己設(shè)置時區(qū)了,具體設(shè)置方法如下:
    1.可以通過修改php.ini文件中的date.timezone = PRC;來顯示(這種方法修改之后要保存并重啟Apache
    2.通過在PHP代碼頁面開頭輸入date_default_timezone_set('PRC');來解決。(此種方法麻煩在于每寫一個新的頁面就得重新寫一個放開頭。)
    2. fopen()函數(shù)
    • 打開文件或者URL;需要傳遞2、3或4個參數(shù)。通常代碼如下:

      • $fp=fopen("$DOCUMENT_ROOT/../orders/oreders.txt",'ab');

      • 后面ab可能取值為
    • fopen()函數(shù)第3個參數(shù)是可選的,如果要在include_path中搜索某個文件,就可以使用,具體用法是將這個參數(shù)設(shè)置為1(true)。

      • $fp=fopen("$DOCUMENT_ROOT/../orders/oreders.txt",'ab',true);
    • 第4個參數(shù)是允許fopen()函數(shù)的文件名稱可以以協(xié)議名稱開始(如http://或ftp:// 等),并且可以遠程打開該文件。

      • 如果不想使用該參數(shù),可以通過php.ini文件中的allow_url_fopen指令來禁用。
  • URL中的域名是不區(qū)分大小寫,但是路徑和文件名可能會區(qū)分大小寫。
  • 出現(xiàn)Warning: fopen(D:/myblog/../orders/orders.txt): failed to open stream: No such file or directory in D:\myblog\PHP&MYSQL\first clas.php on line 65情況的解決方法。
    • 原代碼如下:

      • $fp=fopen("$DOCUMENT_ROOT/../orders/orders.txt",'ab');
    • 運行之后會報出如下警告:

      • Warning: fopen(D:/myblog/../orders/orders.txt): failed to open stream: No such file or directory in D:\myblog\PHP&MYSQL\first clas.php on line 65
        -大致意思是該fopen語句沒有找到正確的文件或路徑。
    • 解決辦法:

      • 由于我是在windows下使用PHP所以需要再"$DOCUMENT_ROOT/../orders/orders.txt"這部分中所有的符號都加上轉(zhuǎn)義字符,這樣windows才會認為路徑正確。
      • 尤其需要注意的是"$"符號前也要加入轉(zhuǎn)義字符,不然依舊會報錯。
  • 修改后的代碼如下,正反斜線均可以,但前面一定要加入轉(zhuǎn)義字符
    • 1.$fp=fopen("\$DOCUMENT_ROOT\\..\\orders\\orders.txt",'ab');
    • 2.$fp=fopen("\$DOCUMENT_ROOT\/..\/orders\/orders.txt",'ab');

3.fwrite()函數(shù)

  • 在PHP中寫文件。
  • int fwrite(respice handle,string string[,int length])
  • length這個參數(shù)是寫入的最大字符數(shù),可選。
  • fputs()也是寫文件,其可以看做是fwrite()的別名函數(shù)。

4.feof()函數(shù)

  • 測試文件指針(1)是否到了文件結(jié)束的位置

5.fgets()、fgetss()、fgetcsv()

  • fgets()函數(shù)

    • 可以從文件中每次讀取一行內(nèi)容,直到遇到換行字符位置"windo: \r\n;Linux: \n"
    • 如果指定了長度,則實際讀取的長度是指定長度減1B
  • fgetss()函數(shù)

    • 和fgets()函數(shù)一樣,也是從文件每次讀取每行內(nèi)容,但區(qū)別在于它可以過濾字符串中包含的PHP和HTML標(biāo)記。
    • 如果想要在此之上過濾其他特殊標(biāo)記,需要把其包含在allowable_tags字符串中
    • 出于安全性的考慮,在讀取別人所編寫的文件或者用戶所輸入的文件時,推薦使用fgetss()函數(shù),這是因為:
      • 允許無限制的HTML代碼出現(xiàn)在文件中可能會破壞之前所設(shè)計的格式;
      • 而允許無限制的PHP代碼出現(xiàn)在文件中則可能造成安全方面的問題。
  • fgetcsv()函數(shù)

    • array fgetcsv (resource fp, int length [, string delimiter[, string enclosure]])
    • 如果在文件中使用了定界符(2),如制表符或者,可以用fgetcsv()函數(shù)將文件分成多行。
    • 可以像使用fgets()函數(shù)一樣使用它,不同的是必須向這個函數(shù)傳遞一個用于 分隔表單域的定界符。
    • length的長度應(yīng)該比要讀的文件最長數(shù)據(jù)行的字符數(shù)大。
    • enclosure用來制定每行中封閉每一個域的字符。如果沒有制定任何字符,則默認是"。

6.readfile()、fpassthru()、file()

  • readfile()

    • int readfile(string filename, [int use_include_path [, resource context]]);
    • 使用readfile()函數(shù)將會打開所指定的文件,并且將文件內(nèi)容輸出到瀏覽器中,然后再關(guān)閉這個文件。
    • use_include_path參數(shù)可選,其制定了PHP是否應(yīng)該再include_path中查找文件。
    • context參數(shù)只有在文件被遠程(http://或ftp://)打開時才使用。具體是指該函數(shù)返回值從文件中讀出的字節(jié)總數(shù)。
  • fpassthru()

    • 使用該函數(shù)必須先使用fopen()打開文件。然后文件指針作為參數(shù)傳遞給fpassthru()。這樣就可以把文件指針?biāo)赶虻奈募?nèi)容發(fā)給瀏覽器。最后 再關(guān)閉該文件。
  • flie()

    • 出了和readfile()一樣可以將讀取的文件內(nèi)容顯示到瀏覽器上之外
    • 該函數(shù)特殊之處在于,它其實是把結(jié)果發(fā)送到一個數(shù)組中,文件中的每一行都將作為一個元素保存在該數(shù)組中。

7.fgetc()

  • fgets()函數(shù)是一行一行讀取內(nèi)容,fgetc()函數(shù)則是每次讀取一個字符。
  • 該函數(shù)的一個缺點在于它會返回文件結(jié)束符EOF.

8.fread()

  • string fread(resource fp, int length);
  • 從文件中讀取任意長度的字節(jié)
  • 使用該函數(shù),要么它讀滿length參數(shù)所制定的字節(jié),要么就是讀到了文件的末尾,要么是網(wǎng)絡(luò)數(shù)據(jù)包的結(jié)束。

9.file_exists()

  • 該函數(shù)可以在不打開文件的前提下,檢查一個文件是否存在

10.filesize()

  • 該函數(shù)以字節(jié)為單位返回一個文件的大小。

11.unlink()

  • 刪除相應(yīng)的文件。
  • 如果無法刪除該文件,則函數(shù)返回false;同時,如果對該文件的訪問權(quán)限不夠或者該文件不存在,該函數(shù)也會返回false。

12.rewind()、fseek()、ftell()

  • rewind()

    • 該函數(shù)可以將文件指針復(fù)位到文件的開始。
  • ftell()

    • 該函數(shù)可以以字節(jié)為單位報告文件指針當(dāng)前在文件中的位置。
  • fseek()

    • int feek(resource fp, int offset [, int whence])
    • 該函數(shù)可以將文件指針fp從whence位置移動offset個字節(jié)。
    • 其默認值SEEK_SET表示文件的開始處。
    • 該參數(shù)的其他可能值為SEEK_CUR(文件指針的當(dāng)前位置)和SEEK_END(文件的結(jié)束)
    • rewind()函數(shù)其實等價于調(diào)用一個具有零偏移量的fseek()函數(shù)

13.flock()

  • bool flock(resource fp, int operation [,int & wouldblock])
  • 該函數(shù)是將文件進行鎖定的方法。
  • operation的值如下之一:
    • LOCK_SH:取得共享鎖定(讀操作鎖定。意味著文件可以共享,其他人可以讀該文件)
    • LOCK_EX:取得獨占鎖定(寫操作鎖定。這是互斥的。該文件不能被共享)
    • LOCK_UN:釋放鎖定(無論共享或獨占)
    • LOCK_NB:防止在請求加鎖時發(fā)生阻塞(windows上暫不支持)
  • 至于wouldblock值:
    • 如果鎖定會堵塞的話(EWOULDBLOCK 錯誤碼情況下),可選的第三個參數(shù)會被設(shè)置為 TRUE。(Windows 上暫不支持)

相關(guān)詞語

1.文件指針:

  • 在C語言中用一個指針變量指向一個文件,這個指針稱為文件指針。通過文件指針就可對它所指的文件進行各種操作。
  • 而在PHP中,所謂文件指針個人的理解是類似于我們平時操作文檔時鼠標(biāo)指針的位置,如圖所示:
    • 豎線就是指針

2.定界符:

  • 定界符的出現(xiàn)是為了能夠在PHP中輸入大量文字而不使用轉(zhuǎn)移符。
  • 簡單來說就是允許程序猿自己定義出了單雙引號之外的字符串邊界。
    • 一般來說在PHP中,我們都是使用""或者''來定義字符串。
    • 但是PHP還可以允許程序猿自己定義字符串邊界標(biāo)記
    • 使用定界符是以<<<開頭,來宣告進入定界符模式。
    • <?php echo<<<EEE 為了能夠在PHP中輸入大量文字而不是用轉(zhuǎn)義符,人們發(fā)明出了定界符。 定界符可能一開始"有點難以理解,學(xué)會之后是很有用處的"。 簡單來說,'定界符就是允許你自己定義除了單雙引號之外的字符串的邊界'。 實際使用定界符的時候,要注意字符串的分隔符需要自己單獨一行,也就是說,在它前后都不能加空格或tab。 EEE; ?>
    • 實際輸出效果
  • 特別需要注意!
    • 雖然使用定界符之后可以隨意使用""''而不用加轉(zhuǎn)義符,但如果是使用$依舊需要加轉(zhuǎn)義符"\$"
    • 注意字符串的分隔符需要自己單獨一行
    • 定界符的前后都不能有其他符號或者空格,也就是說開始的EEE這個后面不能有空格或者任意符號,結(jié)束的EEE也只能加上個;來表示定界符結(jié)束。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、文件處理流程 文件處理流程:寫入文件流程: 打開文件,文件不存在就創(chuàng)建; 將數(shù)據(jù)寫入文件; 關(guān)閉文件。讀文件流...
    ManZb閱讀 519評論 0 0
  • php是一種服務(wù)器端解釋的腳本語言。 什么是PHPPHP是一種服務(wù)器端腳本語言,他是專門為Web而設(shè)計的。 第一篇...
    vernwang閱讀 1,915評論 1 49
  • 一、php可以做什么 php是一種可以在服務(wù)器端運行的編程語言,可以運行在Web服務(wù)器端。 php是一門后臺編程語...
    空谷悠閱讀 3,278評論 4 97
  • C/C++輸入輸出流總結(jié) 前兩天寫C++實習(xí)作業(yè),突然發(fā)現(xiàn)I/O是那么的陌生,打了好長時間的文件都沒有打開,今天終...
    LuckTime閱讀 1,807評論 0 6
  • 那些工作起來就跟瘋了一樣的人,反正我是一點也不羨慕,一點也不。 朋友圈里有各種很忙的人,忙兼職,管社團活動,...
    繁櫻之處灼灼銀花閱讀 1,042評論 3 1

友情鏈接更多精彩內(nèi)容