使用遠(yuǎn)程文件

只要在 php.ini 文件中激活了 allow_url_fopen 選項(xiàng),就可以在大多數(shù)需要用文件名作為參數(shù)的函數(shù)中使用 HTTPFTP 的 URL 來代替文件名。同時(shí),也可以在 includeinclude_once、requirerequire_once 語句中使用 URL。PHP 所支持協(xié)議的更多信息參見支持的協(xié)議和封裝協(xié)議。

注意:

要在 PHP 4.0.3 及其更早的版本中使用 URL 封裝協(xié)議,需要在編譯時(shí)用 --enable-url-fopen-wrapper 參數(shù)來配置 PHP。

注意:

Windows 版本的 PHP 4.3 版之前不支持以下函數(shù)的遠(yuǎn)程訪問:include,include_once,requirerequire_once 以及GD 和圖像處理 函數(shù)中的 imagecreatefromXXX 函數(shù)。

例如,可以用以下范例來打開遠(yuǎn)程 web 服務(wù)器上的文件,解析需要的輸出數(shù)據(jù),然后將這些數(shù)據(jù)用在數(shù)據(jù)庫(kù)的檢索中,或者簡(jiǎn)單地以和自己網(wǎng)站其它頁(yè)面相同的風(fēng)格輸出其內(nèi)容。

示例 #1 獲取遠(yuǎn)程文件的標(biāo)題

<?php
$file 
fopen ("http://www.example.com/""r");
if (!
$file) {
    echo 
"<p>Unable to open remote file.\n";
    exit;
}
while (!
feof ($file)) {
    
$line fgets ($file1024);
    
/* 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);
?>

如果有合法的訪問權(quán)限,以一個(gè)用戶的身份和某 FTP 服務(wù)器建立了鏈接,還可以向該 FTP 服務(wù)器端的文件進(jìn)行寫操作。僅能用該方法來創(chuàng)建新的文件;如果嘗試覆蓋已經(jīng)存在的文件,fopen() 函數(shù)的調(diào)用將會(huì)失敗。

要以“anonymous”以外的用戶名連接服務(wù)器,需要指明用戶名(可能還有密碼),例如“ftp://user:password@ftp.example.com/path/to/file”(也可以在通過需要 Basic 認(rèn)證的 HTTP 協(xié)議訪問遠(yuǎn)程文件時(shí)使用相同的語法)。

示例 #2 將數(shù)據(jù)保存到遠(yuǎn)程服務(wù)器

<?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);
?>

注意:

或許可以從以上范例中得到啟發(fā),用該技術(shù)來存儲(chǔ)遠(yuǎn)程日志文件。但是正如以上提到的,在用 fopen() 方式打開的 URL 中,僅能對(duì)新文件進(jìn)行寫操作。如果遠(yuǎn)程文件已經(jīng)存在則 fopen() 函數(shù)的操作將會(huì)失敗。要做類似于分布式日志的事,可以參考 syslog() 函數(shù)。