一、 PHP抓取页面的主要方法:
1. file()函数
2. file_get_contents()函数
3. fopen()->fread()->fclose()模式
4.curl方式
5. fsockopen()函数 socket模式
二、PHP解析html或xml的方式:
1. file()函数
$url='http://t.qq.com';
$lines_array=file($url);
$lines_string=implode('',$lines_array);
echo htmlspecialchars()($lines_string);
2. file_get_contents()函数
使用file_get_contents和fopen必须空间开启allow_url_fopen。
方法:编辑php.ini,设置 allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。
$url='http://t.qq.com';
$lines_string=file_get_contents($url);
echo htmlspecialchars($lines_string);
3. fopen()->fread()->fclose()模式
$url='http://t.qq.com';
$handle=fopen($url,"rb");
$lines_string="";
do{
$data=fread($handle,1024);
if(strlen($data)==0) {
break;
}
$lines_string.=$data;
}while(true);
fclose($handle);
echo htmlspecialchars($lines_string);
4. curl方式
使用curl必须空间开启curl。方法:windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而且需 要拷贝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安装curl扩展。
$url='http://t.qq.com';
$ch=curl_init();
$timeout=5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$lines_string=curl_exec($ch);
curl_close($ch);
echo htmlspecialchars($lines_string);
5. fsockopen()函数 socket模式
socket模式能否正确执行,也跟服务器的设置有关系,具体可以通过phpinfo查看服务器开启了哪些通信协议,比如我的本地php socket没开启http,只能使用udp测试一下了。
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) {
echo "ERROR: $errno - $errstr<br />\n"
} else {
fwrite($fp, "\n")
echo fread($fp, 26)
fclose($fp)
}
之前我们介绍过一个php二维码程序,本文接着想尝试下在邮箱的签名中添加自己的通讯录二维码,方便手机直接拍照添加联系人到通讯录。
代码如下:
include("phpqrcode/phpqrcode.php");
$url='BEGIN:VCARD
VERSION:3.0
FN:张三
NICKNAME:zhangsan
ORG:水平有限互联网公司
TITLE:PHP应用开发工程师
TEL;TYPE=work:***44301
TEL:158****4233
EMAIL:zhangsan@***.***.com.cn
END:VCARD';
QRcode::png($url,"b.png");
?>
注意:以上方法需要下载phpqrcode的文件。
另外,还可以用谷歌api的方法。
<?php
$vname = '张三';
$vtel = '158****4233';
$nickname='zhangsan';
$company='水平有限互联网公司';
$title='PHP应用开发工程师';
$email="zhangsan@***.***.com.cn";
$worktel='***44301';
generateQRfromGoogle($vname,$vtel,$nickname,$company,$title,$worktel,$email);
function generateQRfromGoogle($vname,$vtel,$nickname,$company,$title,$worktel,$email,$widhtHeight ='200',$EC_level='L',$margin='0')
{
if($vname&&$vtel){
$chl = "BEGIN:VCARD\nVERSION:3.0\n". //vcard头信息
"FN:$vname\n".
"NICKNAME:$nickname\n".
"ORG:$company\n".
"TEL:$vtel\n".
"TITLE:$title\n".
"TEL;WORK;VOICE:$worktel\n".
"EMAIL:$email\n".
"END:VCARD"; //vcard尾信息
echo $chl;echo "\n";
echo '<img src="http://chart.apis.google.com/chart?chs='.$widhtHeight.'x'.$widhtHeight.'&cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.urlencode($chl).'"
alt="QR code" widhtHeight="'.$widhtHeight.'" widhtHeight="'.$widhtHeight.'"/>';
}
}
?>
效果图:
php生成二维码可以有以下几种方式
1.google开放api
例子:
//google api
$url="http://phperzj.sinaapp.com/";
echo cre_QR($url);
function cre_QR($chl,$widhtHeight ='150',$EC_level='L',$margin='0'){
$chl=urlencode($chl);
$qr = '</pre>
<img src="http://chart.apis.google.com/chart?chs='.$widhtHeight.'x'.$widhtHeight.'&cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$chl.'" alt="QR code" />
<pre>';
return $qr;
}
?>
参数说明如下:
http://chart.apis.google.com/chart? : 调用 Google 图表 API
cht=qr :选择生产QR码
&chs=100×100 :尺寸大小
&chld=L|4 :L代表默认纠错水平; 4代表二维码边界空白大小,可自行调节。
&chl= :二维码内容
很贴心的是这个api支持get和post
2.php类库PHP QR Code
PHP QR Code is open source (LGPL) library for generating QR Code,
2-dimensional barcode. Based on libqrencode C library,
provides API for creating QR Code barcode images (PNG, JPEG thanks to GD2).
Implemented purely in PHP, with no external dependencies (except GD2 if needed).
地址:http://phpqrcode.sourceforge.net/
下载:http://sourceforge.net/projects/phpqrcode/
说明:
To install simply include:
qrlib.php for full version (also you have to provide all library files form package plus cache dir)
OR phpqrcode.php for merged version (only one file, but slower and less accurate code because disabled cache and quicker masking configured)
Then use it as follows:
QRcode::png(‘code data text’, ‘filename.png’); // creates file
QRcode::png(‘some othertext 1234′); // creates code image and outputs it directly into browser
例子:
//PHP QR CODE
//include("phpqrcode/qrlib.php");
include("phpqrcode/phpqrcode.php");
QRcode::png("http://phperzj.sinaapp.com");
?>
3.libqrencode
地址:http://fukuchi.org/works/qrencode/index.en.html
php支持请参考:http://hirokawa.netflowers.jp/entry/4900/
4.QRcode Perl CGI & PHP scripts
地址:http://www.swetake.com/qr/qr_cgi.html