您的位置:永利集团登录网址 > 永利集团登录网址 > PHP读取网页文件内容的实现代码(fopen,curl等)永利

PHP读取网页文件内容的实现代码(fopen,curl等)永利

2019-10-01 00:56

 1、用file_get_contents或者fopen、file、readfile等函数读取url的时候,会创建一个名为$http_response_header的变量来保存http响应的报头,使用fopen等函数打开的数据流信息可以用stream_get_meta_data来获取。

1: 用file_get_contents 以get方式获取内容

1.fopen实现代码:

  2、php教程5中新增的参数context使这些函数更加灵活,通过它我们可以定制http请求,甚至post数据。

复制代码 代码如下:

复制代码 代码如下:

  示例代码1:

<?php
$url='';
$html = file_get_contents($url);
//print_r($http_response_header);
ec($html);
printhr();
printarr($http_response_header);
printhr();
?>

<?php
$handle = fopen ("", "rb");
$contents = "";
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);
?>

 代码如下

示例代码2: 用fopen打开url, 以get方式获取内容

复制代码 代码如下:

<?php
$html = file_get_contents(');
print_r($http_response_header);  
// or
$fp = fopen('', 'r');
print_r(stream_get_meta_data($fp));
fclose($fp);
?>

复制代码 代码如下:

<?php
// 对 PHP 5 及更高版本
$handle = fopen("", "rb");
$contents = stream_get_contents($handle);
fclose($handle);
?>

  示例代码2:

<?
$fp = fopen($url, 'r');
printarr(stream_get_meta_data($fp));
printhr();
while(!feof($fp)) {
$result .= fgets($fp, 1024);
}
echo "url body: $result";
printhr();
fclose($fp);
?>

2.curl实现代码:

 代码如下

示例代码3:用file_get_contents函数,以post方式获取url

复制代码 代码如下:

<?php
$data = array ('foo' => 'bar');
$data = http_build_query($data);
$opts = array (
    'http' => array (
        'method' => 'post',
        'header'=> "content-type: application/x-www-form-urlencoded " .
                   "content-length: " . strlen($data) . " ",
        'content' => $data
    ),
);
$context = stream_context_create($opts);
$html = file_get_contents('', false, $context);
echo $html;
?>

复制代码 代码如下:

<?php
function _url($Date){
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, "$Date");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$contents = curl_exec($ch);
curl_close($ch);
return $contents;
}
$pageURL="";
$contents=_url($pageURL);
?>

实例三

<?php
$data = array ('foo' => 'bar');
$data = http_build_query($data);
$opts = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded" .
"Content-Length: " . strlen($data) . "",
'content' => $data
),
);
$context = stream_context_create($opts);
$html = file_get_contents('', false, $context);
echo $html;
?>

编码转换函数

获取过来以后自动输出到浏览器,我们有没有其他的方式组织获取的信息,然后控制其输出的内容呢?完全没有问题,在curl_setopt()函数的参数中,如果希望获得内容但不输出,使用curlopt_returntransfer 参数,并设为非0值/true!,完整代码请看:

示例代码4:用fsockopen函数打开url,以get方式获取完整的数据,包括header和body

复制代码 代码如下:

<?php // create a new curl resource  $ch = curl_init();  // set url and other appropriate options  curl_setopt($ch, curlopt_url, “);  curl_setopt($ch, curlopt_returntransfer, true);  // grab url, and return output  $output = curl_exec($ch);  // close curl resource, and free up system resources  curl_close($ch);  // replace ‘google’ with ‘phpit’  $output = str_replace(’google’, ‘phpit’, $output);  // print output  echo $output;  ?>

复制代码 代码如下:

$html = file_get_contents("");
$html = iconv( "Big5", "UTF-8//IGNORE" , $html); //转化编码方式为UTF8
print $html;
$htm = file("");
$h = "";
foreach($htm as $value)
{
$h.= iconv( "GB2312", "utf-8//IGNORE" , $value);
}
print_r($h);

<?
function get_url ($url,$cookie=false) {
$url = parse_url($url);
$query = $url[path]."?".$url[query];
ec("Query:".$query);
$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);
if (!$fp) {
return false;
} else {
$request = "GET $query HTTP/1.1";
$request .= "Host: $url[host]";
$request .= "Connection: Close";
if($cookie) $request.="Cookie: $cookien";
$request.="";
fwrite($fp,$request);
while(!@feof($fp)) {
$result .= @fgets($fp, 1024);
}
fclose($fp);
return $result;
}
}
//获取url的html部分,去掉header
function GetUrlHTML($url,$cookie=false) {
$rowdata = get_url($url,$cookie);
if($rowdata)
{
$body= stristr($rowdata,"");
$body=substr($body,4,strlen($body));
return $body;
}
return false;
}

另一种打开网页的方法

?>

复制代码 代码如下:

示例代码5:用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body

<?php
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: enrn" .
"Cookie: foo=barrn"
)
);
$context = stream_context_create($opts);
/* Sends an http request to www.example.com
with additional headers shown above */
$fp = fopen('', 'r', false, $context);
fpassthru($fp);
fclose($fp);
?>

复制代码 代码如下:

您可能感兴趣的文章:

  • php读取二进制流(C语言结构体struct数据文件)的深入解析
  • PHP读取文件内容的五种方式
  • php读取本地文件常用函数(fopen与file_get_contents)
  • PHP读取txt文件的内容并赋值给数组的代码
  • php逐行读取txt文件写入数组的方法
  • 用PHP读取超大文件的实例代码
  • php 读取文件乱码问题
  • php读取文件内容到数组的方法
  • PHP实现类似于C语言的文件读取及解析功能
  • PHP file_get_contents() 函数

<?
function HTTP_Post($URL,$data,$cookie, $referrer="") {
// parsing the given URL
$URL_Info=parse_url($URL);
// Building referrer
if($referrer=="") // if not given use this script as referrer
$referrer="111";
// making string from $data
foreach($data as $key=>$value)
$values[]="$key=".urlencode($value);
$data_string=implode("&",$values);
// Find out which port is needed - if not given use standard (=80)
if(!isset($URL_Info["port"]))
$URL_Info["port"]=80;
// building POST-request:
$request.="POST ".$URL_Info["path"]." HTTP/1.1n";
$request.="Host: ".$URL_Info["host"]."n";
$request.="Referer: $referern";
$request.="Content-type: application/x-www-form-urlencodedn";
$request.="Content-length: ".strlen($data_string)."n";
$request.="Connection: closen";
$request.="Cookie: $cookien";
$request.="n";
$request.=$data_string."n";
$fp = fsockopen($URL_Info["host"],$URL_Info["port"]);
fputs($fp, $request);
while(!feof($fp)) {
$result .= fgets($fp, 1024);
}
fclose($fp);
return $result;
}
printhr();
?>

示例代码6:使用curl库,使用curl库之前,你可能需要查看一下php.ini,查看是否已经打开了curl扩展

复制代码 代码如下:

<?
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, '');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
?>

关于curl库:
curl官方网站
curl 是使用URL语法的传送文件工具,支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP POST、HTTP PUT 、FTP 上传,kerberos、基于HTT格式的上传、代理、cookie、用户+口令证明、文件传送恢复、http代理通道和大量其他有用的技巧

复制代码 代码如下:

<?
function printarr(array $arr)
{
echo "<br> Row field count: ".count($arr)."<br>";
foreach($arr as $key=>$value)
{
echo "$key=$value <br>";
}
}
?>

  1. 有些主机服务商把php的allow_url_fopen选项是关闭了,就是没法直接使用file_get_contents来获取远程web页面的内容。那就是可以使用另外一个函数curl。
    下面是file_get_contents和curl两个函数同样功能的不同写法
    file_get_contents函数的使用示例:

复制代码 代码如下:

< ?php
$file_contents = file_get_contents('');
echo $file_contents;
?>

换成curl函数的使用示例:

复制代码 代码如下:

< ?php
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, '');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
?>

利用function_exists函数来判断php是否支持一个函数可以轻松写出下面函数

复制代码 代码如下:

< ?php
function vita_get_url_content($url) {
if(function_exists('file_get_contents')) {
$file_contents = file_get_contents($url);
} else {
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
}
return $file_contents;
}
?>

其实上面的这个函数还有待商榷,如果你的主机服务商把file_get_contents和curl都关闭了,上面的函数就会出现错误。

您可能感兴趣的文章:

  • THinkPHP获取客户端IP与IP地址查询的方法
  • PHP获取客户端及服务器端IP的封装类
  • thinkphp如何获取客户端IP
  • php中获取远程客户端的真实ip地址的方法
  • PHP 显示客户端IP与服务器IP的代码
  • PHP 获取客户端真实IP地址多种方法小结
  • php 获取客户端的真实ip
  • php 获取完整url地址
  • php获取当前页面完整URL地址
  • php提取字符串中网站url地址的方法
  • php实现把url转换迅雷thunder资源下载地址的方法
  • php获取客户端IP及URL的方法示例

本文由永利集团登录网址发布于永利集团登录网址,转载请注明出处:PHP读取网页文件内容的实现代码(fopen,curl等)永利

关键词: