新聞中心

2. 使用 file_get_contents()
3. CURL 4,讓你自己的函數(shù)使用php的socket函數(shù)。 首先我要警告你關(guān)于一些。你可以只使用 fopen()和 file_get_contents()當(dāng)啟用fopen包裝器。這個(gè)參數(shù)中指定的php。ini文件并不能改變?cè)谶\(yùn)行時(shí)使用 ini設(shè)置(),知道你是否可以使用這兩個(gè)或不可以使用下面的代碼檢查包裝器設(shè)置的價(jià)值。fopen if (ini_get('allow_url_fopen') == '1') {
// 使用fopen()或file_get_contents()
} else {
// 使用curl或定制函數(shù)
} 1。使用fopen() 如果你使用 fopen()閱讀一個(gè)遠(yuǎn)程文件的過程很簡(jiǎn)單,從本地文件讀取。唯一的區(qū)別是,您將指定URL而不是文件名??纯聪旅娴睦? / /確保遠(yuǎn)程文件成功打開在做任何其他事情之前
if ($fp = fopen('http://www.google.com/', 'r')) {
$content = '';
// 繼續(xù)閱讀,直到?jīng)]有什么離開
while ($line = fread($fp, 1024)) {
$content .= $line;
}
// 做一些與這里的內(nèi)容
// ...
} else {
// 出錯(cuò)當(dāng)試圖打開指定的url
}
if ($fp = fopen('http://www.google.com/', 'r')) {
$content = '';
// 繼續(xù)閱讀,直到?jīng)]有什么離開
while ($line = fgets($fp, 1024)) {
$content .= $line;
}
// 做一些與這里的內(nèi)容
// ...
} else {
// 出錯(cuò)當(dāng)試圖打開指定的url
}
if ($content !== false) {
// 做些什么內(nèi)容
} else {
// 一個(gè)錯(cuò)誤發(fā)生
} 3。curl
不同于上述兩種方法使用CURL不能說為straigthforward。雖然這個(gè)庫是非常有用的,可能不同的協(xié)議(而不僅僅是HTTP)進(jìn)行連接和通信,它需要更多的精力來學(xué)習(xí)。另一個(gè)問題是,并非所有的Web主機(jī)有這個(gè)庫中的PHP安裝。因此,我們一定要檢查庫的安裝,然后再嘗試使用它。
這是一個(gè)基本的例子獲取遠(yuǎn)程文件
/ /確保旋度是安裝 if (function_exists('curl_init')) { / /初始化一個(gè)新的curl資源 $ch = curl_init(); / /設(shè)置url獲取 curl_setopt($ch, CURLOPT_URL, 'http://www.google.com'); / /別給我頭的內(nèi)容 curl_setopt($ch, CURLOPT_HEADER, 0); / /返回值,而不是打印響應(yīng)瀏覽器 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); / /使用一個(gè)用戶代理模仿一個(gè)瀏覽器 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0'); $content = curl_exec($ch); / /記得總是關(guān)閉會(huì)話和免費(fèi)的所有資源 curl_close($ch);} else { / / curl庫沒有安裝,所以我們更好地利用其他東西 } 在某些情況下使用CURL是速度比使用 file_get_contents()或 fopen()更快。這是因?yàn)镃URL默認(rèn)處理壓縮協(xié)議(例如gzip)。許多網(wǎng)站,大的、小的、使用gzip壓縮壓縮他們的網(wǎng)頁為了節(jié)省帶寬。這個(gè)網(wǎng)站,例如,也使用gzip壓縮,減少帶寬使用到一半。所以,如果您是那種等不及的CURL將適合你。 4。定制函數(shù) 在最壞的情況下,您的服務(wù)器將禁用FOPEN包裝,并沒有安裝CURL庫。在這種情況下,你只需要做出你自己的方式。 我們的函數(shù)應(yīng)當(dāng)命名 getRemoteFile()這只需要一個(gè)參數(shù),遠(yuǎn)程文件的url。對(duì)這個(gè)函數(shù)的骨架如下所示 function getRemoteFile($url)
{ / / 1。把主機(jī)名和url路徑 / / 2。連接到遠(yuǎn)程服務(wù)器 / / 3。發(fā)送必要的標(biāo)題獲取文件 / / 4。檢索響應(yīng)來自遠(yuǎn)程服務(wù)器 / / 5。strip the headers / / 6。返回文件的內(nèi)容 提取的主機(jī)名和url路徑從給定的url,我們將使用 parse_url()函數(shù)。當(dāng)給定url這個(gè)函數(shù)會(huì)輸出以下:
- scheme
- host
- port
- user
- pass
- path
- query
- fragment
{
// 把主機(jī)名和url路徑
$parsedUrl = parse_url($url);
$host = $parsedUrl['host'];
if (isset($parsedUrl['path'])) {
$path = $parsedUrl['path'];
} else {
// url指向主機(jī)像http://www.mysite.com
$path = '/';
}
if (isset($parsedUrl['query'])) {
$path .= '?' . $parsedUrl['query'];
}
if (isset($parsedUrl['port'])) {
$port = $parsedUrl['port'];
} else {
// 大多數(shù)網(wǎng)站使用端口80
$port = '80';
}
$timeout = 10;
$response = '';
// 連接到遠(yuǎn)程服務(wù)器
$fp = @fsockopen($host, '80', $errno, $errstr, $timeout );
if( !$fp ) {
echo "Cannot retrieve $url";
} else {
// 發(fā)送必要的標(biāo)題獲取文件
fputs($fp, "GET $path HTTP/1.0
" .
"Host: $host
" .
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3
" .
"Accept: */*
" .
"Accept-Language: en-us,en;q=0.5
" .
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
" .
"Keep-Alive: 300
" .
"Connection: keep-alive
" .
"Referer: http://$host
");
// 檢索響應(yīng)來自遠(yuǎn)程服務(wù)器
while ( $line = fread( $fp, 4096 ) ) {
$response .= $line;
}
fclose( $fp );
// strip the headers
$pos = strpos($response, "
");
$response = substr($response, $pos + 4);
}
// 返回文件的內(nèi)容
return $response;
}
文章題目:使用PHP讀取遠(yuǎn)程文件-創(chuàng)新互聯(lián)
文章分享:http://www.dlmjj.cn/article/psddd.html