使用PHP读取远程文件-创新互联
2. 使用 file_get_contents()
3. CURL 4,让你自己的函数使用php的socket函数。 首先我要警告你关于一些。你可以只使用 fopen()和 file_get_contents()当启用fopen包装器。这个参数中指定的php。ini文件并不能改变在运行时使用 ini设置(),知道你是否可以使用这两个或不可以使用下面的代码检查包装器设置的价值。fopen if (ini_get('allow_url_fopen') == '1') {
// 使用fopen()或file_get_contents()
} else {
// 使用curl或定制函数
} 1。使用fopen() 如果你使用 fopen()阅读一个远程文件的过程很简单,从本地文件读取。唯一的区别是,您将指定URL而不是文件名。看看下面的例子: / /确保远程文件成功打开在做任何其他事情之前
if ($fp = fopen('http://www.google.com/', 'r')) {
$content = '';
// 继续阅读,直到没有什么离开
while ($line = fread($fp, 1024)) {
$content .= $line;
}
// 做一些与这里的内容
// ...
} else {
// 出错当试图打开指定的url
}
if ($fp = fopen('http://www.google.com/', 'r')) {
$content = '';
// 继续阅读,直到没有什么离开
while ($line = fgets($fp, 1024)) {
$content .= $line;
}
// 做一些与这里的内容
// ...
} else {
// 出错当试图打开指定的url
}
if ($content !== false) {
// 做些什么内容
} else {
// 一个错误发生
} 3。curl
不同于上述两种方法使用CURL不能说为straigthforward。虽然这个库是非常有用的,可能不同的协议(而不仅仅是HTTP)进行连接和通信,它需要更多的精力来学习。另一个问题是,并非所有的Web主机有这个库中的PHP安装。因此,我们一定要检查库的安装,然后再尝试使用它。
这是一个基本的例子获取远程文件
/ /确保旋度是安装 if (function_exists('curl_init')) { / /初始化一个新的curl资源 $ch = curl_init(); / /设置url获取 curl_setopt($ch, CURLOPT_URL, 'http://www.google.com'); / /别给我头的内容 curl_setopt($ch, CURLOPT_HEADER, 0); / /返回值,而不是打印响应浏览器 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); / /使用一个用户代理模仿一个浏览器 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); / /记得总是关闭会话和免费的所有资源 curl_close($ch);} else { / / curl库没有安装,所以我们更好地利用其他东西 } 在某些情况下使用CURL是速度比使用 file_get_contents()或 fopen()更快。这是因为CURL默认处理压缩协议(例如gzip)。许多网站,大的、小的、使用gzip压缩压缩他们的网页为了节省带宽。这个网站,例如,也使用gzip压缩,减少带宽使用到一半。所以,如果您是那种等不及的CURL将适合你。 4。定制函数 在最坏的情况下,您的服务器将禁用FOPEN包装,并没有安装CURL库。在这种情况下,你只需要做出你自己的方式。 我们的函数应当命名 getRemoteFile()这只需要一个参数,远程文件的url。对这个函数的骨架如下所示 function getRemoteFile($url)
{ / / 1。把主机名和url路径 / / 2。连接到远程服务器 / / 3。发送必要的标题获取文件 / / 4。检索响应来自远程服务器 / / 5。strip the headers / / 6。返回文件的内容 提取的主机名和url路径从给定的url,我们将使用 parse_url()函数。当给定url这个函数会输出以下:
- scheme
- host
- port
- user
- pass
- path
- query
- fragment
{
// 把主机名和url路径
$parsedUrl = parse_url($url);
$host = $parsedUrl['host'];
if (isset($parsedUrl['path'])) {
$path = $parsedUrl['path'];
} else {
// url指向主机像http://www.mysite.com
$path = '/';
}
if (isset($parsedUrl['query'])) {
$path .= '?' . $parsedUrl['query'];
}
if (isset($parsedUrl['port'])) {
$port = $parsedUrl['port'];
} else {
// 大多数网站使用端口80
$port = '80';
}
$timeout = 10;
$response = '';
// 连接到远程服务器
$fp = @fsockopen($host, '80', $errno, $errstr, $timeout );
if( !$fp ) {
echo "Cannot retrieve $url";
} else {
// 发送必要的标题获取文件
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
");
// 检索响应来自远程服务器
while ( $line = fread( $fp, 4096 ) ) {
$response .= $line;
}
fclose( $fp );
// strip the headers
$pos = strpos($response, "
");
$response = substr($response, $pos + 4);
}
// 返回文件的内容
return $response;
}
本文标题:使用PHP读取远程文件-创新互联
转载源于:http://ybzwz.com/article/psddd.html