PHP中通過(guò)fopen()函數(shù)訪問(wèn)遠(yuǎn)程文件示例
使用PHP不僅可以讓用戶通過(guò)瀏覽器訪問(wèn)服務(wù)器端的文件,還可以通過(guò)HTTP或FTP等協(xié)議訪問(wèn)其他服務(wù)器中的文件,可以在大多數(shù)需要用文件名作為參數(shù)的函數(shù)中使用HTTP和FTP URL來(lái)代替文件名。使用fopen()函數(shù)將指定的文件名與資源綁定到一個(gè)流上,如果文件名是“scheme://…”的格式,則被當(dāng)成一個(gè)URL,PHP將搜索協(xié)議處理器(也被成為封裝協(xié)議)來(lái)處理此模式。
如果需要遠(yuǎn)程訪問(wèn)文件,必須在PHP的配置文件中激活“allow_url_fopen”選項(xiàng),才能使用fopen()函數(shù)打開遠(yuǎn)程文件。而且還要確定其他服務(wù)器中的文件是否有訪問(wèn)權(quán)限,如果使用HTTP協(xié)議對(duì)遠(yuǎn)程文件進(jìn)行連接,只能以“只讀”模式打開。如果需要訪問(wèn)的遠(yuǎn)程FTP服務(wù)器中,對(duì)所提供的用戶開啟了“可寫權(quán)限,則使用FTP協(xié)議連接遠(yuǎn)程文件時(shí),就可以使用“只寫”或“只讀”模式打開文件。但不可以使用“可讀可寫”模式。
使用PHP訪問(wèn)遠(yuǎn)程文件就像訪問(wèn)本地文件一樣,都是使用相同的讀寫函數(shù)處理。例如,可以用以下范例來(lái)打開遠(yuǎn)程Web服務(wù)器上的文件,解析我們需要的輸出數(shù)據(jù),然后就將這些數(shù)據(jù)用在數(shù)據(jù)庫(kù)的檢索中,或者簡(jiǎn)單地將其輸出到網(wǎng)站剩下內(nèi)容的樣式匹配中。代碼如下所示:
<?php
//通過(guò)http打開遠(yuǎn)程文件
$file = fopen(http://www.dbjr.com.cn, "r") or die("打開遠(yuǎn)程文件失?。。?);
while (!feof($file)){
$line = fgets($file,1024); //每讀取一行
//如果找到遠(yuǎn)程文件中的標(biāo)題標(biāo)記則取出標(biāo)題,并退出循環(huán),不在讀取文件
if (preg_match("/<titile>(.*/)<\/title>",$line,$out)){ //使用正則匹配標(biāo)題標(biāo)記
$title = $out[1]; //將標(biāo)題標(biāo)記中的標(biāo)題字符取出
break; //退出循環(huán),結(jié)束遠(yuǎn)程文件讀取
}
}
fclose($file);
echo $title;
?>
如果有合法的訪問(wèn)權(quán)限,可以以一個(gè)用戶的身份和某FTP服務(wù)器建立連接,這樣就可以向該FTP服務(wù)器端的文件進(jìn)行寫操作了。可以用該技術(shù)來(lái)存儲(chǔ)遠(yuǎn)程日志文件等操作,但僅能用該方法來(lái)創(chuàng)建新的文件,如果嘗試覆蓋已經(jīng)存在的文件,fopen()函數(shù)的調(diào)用將會(huì)失敗。而且要以匿名(anonymous)以外的用戶名連接服務(wù)器,并需要指明用戶名(甚至密碼),例如“ftp://user:password@ftp.lampbrother.net/path/to/file”。代碼如下所示:
<?php
//在ftp.lampbrother.net的遠(yuǎn)程服務(wù)器上創(chuàng)建文件,以寫的模式打開
file = fopen("ftp://user:password@ftp.lapbrother.net/path/to/file", "w");
//將一個(gè)字符串寫入到遠(yuǎn)程文件中去
fwrite($file, "Linux+Apache+MySQL+PHP");
fclose($file);
?>
為了避免由于訪問(wèn)遠(yuǎn)程主機(jī)時(shí)發(fā)生的超時(shí)錯(cuò)誤,可以使用set_time_limit()函數(shù)對(duì)程序的運(yùn)行時(shí)間加以限制。
相關(guān)文章
1億條數(shù)據(jù)如何分表100張到Mysql數(shù)據(jù)庫(kù)中(PHP)
這篇文章主要介紹了當(dāng)數(shù)據(jù)量猛增的時(shí)候如何把一億條數(shù)據(jù)分表100張到Mysql數(shù)據(jù)庫(kù)中,需要的朋友可以參考下2015-07-07PHP中使用sleep造成mysql讀取失敗的案例和解決方法
這篇文章主要介紹了PHP中使用sleep造成mysql讀取失敗的案例和解決方法,如果遇到這個(gè)問(wèn)題,可能會(huì)耗費(fèi)你N久的時(shí)間,希望你能快速的搜索到這篇文章吧,需要的朋友可以參考下2014-08-08php懶人函數(shù) 自動(dòng)添加數(shù)據(jù)
php懶人函數(shù) 自動(dòng)添加數(shù)據(jù),需要的朋友可以參考下。2011-06-06PHP MemCached 高級(jí)緩存應(yīng)用代碼
PHP MemCached 高級(jí)緩存應(yīng)用,使用MemCached的學(xué)習(xí)的朋友可以參考下。2010-08-08php array_intersect比array_diff快(附詳細(xì)的使用說(shuō)明)
在PHP中,使用 array_intersect 求兩個(gè)數(shù)組的交集比使用 array_diff 求同樣兩個(gè)數(shù)組的并集要快。2011-07-07PHP使用HTML5 FormData對(duì)象提交表單操作示例
這篇文章主要介紹了PHP使用HTML5 FormData對(duì)象提交表單操作,結(jié)合實(shí)例形式分析了PHP使用HTML5 FormData對(duì)象提交表單的具體原理、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下2019-07-07