只要在 php.ini 檔案中啟動了 allow_url_fopen
選項,就可以在大多數需要用檔案名作為參數的函數中使用
HTTP 和 FTP 的 URL
來代替檔案名。同時,也可以在
include()、include_once()、require() 及
require_once() 語句中使用 URL。PHP
所支援協定的更多訊息參見附錄 M。
注:
要在 PHP 4.0.3 及其更早的版本中使用 URL 封裝協定,需要在編譯時用
--enable-url-fopen-wrapper 參數來配置 PHP。
例如,可以用以下範例來開啟遠端 web
伺服器上的檔案,解析需要的輸出資料,然後將這些資料用在資料庫的檢索中,或是簡單地以和自己網站其它頁面相同的風格輸出其內容。
例子 39-1. 取得遠端檔案的標題
<?php $file = fopen ("http://www.example.com/", "r"); if (!$file) { echo "<p>Unable to open remote file.\n"; exit; } while (!feof ($file)) { $line = fgets ($file, 1024); /* This only works if the title and its tags are on one line */ if (eregi ("<title>(.*)</title>", $line, $out)) { $title = $out[1]; break; } } fclose($file); ?>
|
|
若果有合法的訪問權限,以一個會員的身份和某 FTP
伺服器建立了連結,還可以向該 FTP
伺服器端的檔案進行寫動作。僅能用該方法來建立新的檔案;若果嘗試覆蓋已經存在的檔案,fopen()
函數的呼叫將會失敗。
要以「anonymous」以外的會員名連線伺服器,需要指明會員名(可能還有密碼),例如「ftp://user:password@ftp.example.com/path/to/file」(也可以在通過需要
Basic 認證的 HTTP 協定訪問遠端檔案時使用相同的語法)。
例子 39-2. 將資料儲存到遠端伺服器
<?php $file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w"); if (!$file) { echo "<p>Unable to open remote file for writing.\n"; exit; } /* Write the data here. */ fwrite ($file, $_SERVER['HTTP_USER_AGENT'] . "\n"); fclose ($file); ?>
|
|
注:
或許可以從以上範例中得到啟發,用該技術來存儲遠端記錄檔案。但是正如以上提到的,在用
fopen() 模式開啟的 URL
中,僅能對新檔案進行寫動作。若果遠端檔案已經存在則
fopen() 函數的動作將會失敗。要做類似於分散式日誌的事,可以參考
syslog() 函數。