Q1: 在php_file8中為什麼會顯示「.」、「..」的資料夾 ? A1: 請參考 9-14 頁中的註,這二個代表相對路徑的資料夾。
Q2: 關於file函數的狀態指標解釋可否再多一點,尤其是,當設為1時,會將<php.ini>檔中……「include_path」……」? A2: include_path 的設定類似系統中規定一些特定路徑,在執行命令或檔案時若在目前的目錄下找不到時,一定要去找的目錄。例如我們在 Windows 的命令列中下 「dir」 的指令,無論在哪個資料夾或位置執行,都一定會執行,因為 dir 的指令的路徑已經包含在 Windwos 所指定要搜尋的目錄中。回到 PHP,若您有在 php.ini 設定某一個路徑為必要搜尋的路徑,即將路徑加在 php.ini 的 include_path 設定中(要注意的是,若有多個路徑 在 UNIX 下用冒號分隔,在 Windows 下用分號分隔。),在使用 file() 的狀態指標可以設為 1,也就是指定的檔案在目前的資料夾找不到時,也會進入 include_path 所指定的路徑中找尋。
Q3: 對於flock中LOCK_NB的解釋不太懂,尤其是「若已被鎖定則不等待跳過」。 A3: 即發現所要處理檔案已遭鎖定,則跳過往下執行。
Q4: 在php_file18中 我試過不加'b',結果也是可以,為什麼? 還有,請問filesize()中參數是檔名,還是路徑? A4: 1.fopen 中對於指定檔案為二進市與文字檔的功能,只有在二進制和文字檔之間有差異的系統才有用。自 PHP 4.3.2 起,對所有區別二進制和文本模式的平台預設模式都被設為二進制模式。但是為了能全面考量移植時會出現的問題,官方手冊強烈建議在用 fopen() 打開文件時總是使用 b 來標記。 2.filesize()中參數為路徑,我們使用檔名表示檔案與程式頁同一路徑。
Q5: fpassthur()函式,不是說回傳值為byte嗎?但是在17例子中,為什麼用 fpassthru($filename);就會讀出文字,還有,為什麼不需要用echo呢? A5: fpassthur()一執行即會將指定檔案的內容顯示在頁面上,在範例中並沒有回傳,是直接執行而顯示結果,所以不用 echo。 而 stream_get_contents() 執行後結果不會馬上顯示在頁面上,而是將結果回傳,所以我們必須使用 echo 將結果顯示在頁面上。 |