下文是介绍一个php版本交通银行网银支付接口开发例子,希望这个例子能帮助到各位。
概述:网银支付接口 和支付宝接口大体上差不多,主要的区别是 交通银行提供的 接口核心的比如,加密等是通过java实现的。所以,要想办法使php和java能正常的通信,为此。官方也提供了两套实现方法,一个是通过 socket 进行通信,另一个方法是通过 java 桥接。下面演示的是 socket方法:
1. 配置运行环境
1.1 安装java,自行到oracle官网下载 java,然后安装,并配置正确的 环境变量。
1.2 把 测试的证书导入到java 虚拟机;
keytool " -import -keystore "java虚拟机放置证书的地址" -storepass changeit -alias test_bocommca -file "证书路径" 完成导入。
例子:keytool" -import -keystore "C:\Program Files\Java\jre1.5\lib\security\cacerts" -storepass changeit -alias test_bocommca -file "C:\socket\cert\test_root.cer"
1.3 修改配置文件(in/B2CMerchantSocket.xml):
采用官方提供的测试 商号进行测试时,无需配置,否则要配置。具体看xml文件说明。
1.4 启动 socket 服务
window:启动 start.bat 及可;
linux: 启动 ohup sh.start,sh& //使当前脚本脱离终端,并在后台运行。
2. 将网银集成到现有的系统:(以mvc的结构进行说明):
2.1 将不变的参数 配置 写入配置文件:
代码如下 |
复制代码 |
$config['interfaceVersion'] = "1.0.0.0"; #接口版本
$config['tranType'] =0; #交易类别 0:B:C
$config['curType'] = 'CNY'; # 交易币种
$config['notifyType'] =1; #0=不通知 1=通知 2=抓取
$config['merURL'] = "http://www.111cn.net /pay/notify"; # 主动通知url
$config['goodsURL' = 'http://www.111cn.net /goods/1.html'; #取货url
$config['jumpSeconds'] =3; #跳转时间
$config['payBatchNo'] = ''; #商户批次号
$config['proxyMerName'] = ''; #代理商家名字
$config['proxyMerType'] = ''; #代理商类型
$config['proxyMerCredentials']= ''; #代理商家批次号
$config['netType'] = 0; #渠道编号
//以下是 新接口需要的参数
$config['socketUrl'] ="tcp://127.0.0.1:8891"; #socket url
$config['merID'] ='301310063009501'; #商户id 3013100630095012
2.2 Model
/**
* 交通银行支付类
*/
class Bocom extends CI_Model {
private $arrReturn=array();
private $socket;
public function __construct() {
parent::__construct ();
//加载交通银行配置文件
$this->config->load('bocom');
$this->socket=$this->config->item('socketUrl');
}
/**
* 支付方法
*
* @param unknown $arr_data=array(
* 'bill_no'=>
* )
*/
public function pay($arr_data){
//获得表单传过来的数据
$this->arrReturn['interfaceVersion'] = $this->config->item('interfaceVersion');
$this->arrReturn['merID'] = $this->config->item('merID'); //商户号为固定
$this->arrReturn['orderid'] = $arr_data['bill_no'];
$this->arrReturn['orderDate'] = $arr_data['bill_date'];
$this->arrReturn['orderTime'] = $arr_data['bill_time'];
$this->arrReturn['tranType'] = $this->config->item('tranType');
$this->arrReturn['amount'] = $arr_data['bill_fee'];
$this->arrReturn['curType'] = $this->config->item('curType');
$this->arrReturn['orderContent'] = isset($arr_data['bill_title'])?iconv('utf-8','gb2312',$arr_data["bill_title"]): ''; #订单内容
$this->arrReturn['orderMono'] = isset($arr_data['bill_mono'])? iconv('utf-8','gb2312',$arr_data['bill_mono']):''; #商家备注
$this->arrReturn['phdFlag'] = isset($arr_data['phpFlag'])?$arr_data['phpFlag']:'';
$this->arrReturn['notifyType'] = $this->config->item('notifyType');
$this->arrReturn['merURL'] = $this->config->item('merURL');
$this->arrReturn['goodsURL'] = $this->config->item('goodsURL');
$this->arrReturn['jumpSeconds'] = $this->config->item('jumpSeconds');
$this->arrReturn['payBatchNo'] = $this->config->item('payBatchNo');
$this->arrReturn['proxyMerName'] = $this->config->item('proxyMerName');
$this->arrReturn['proxyMerType'] = $this->config->item('proxyMerType');
$this->arrReturn['proxyMerCredentials']= $this->config->item('proxyMerCredentials');
$this->arrReturn['netType'] = $this->config->item('netType');
//以下参数 不参与签名
$this->arrReturn['issBankNo'] =isset($arr_data['code_id'])? trim($arr_data['code_id']):'';
$tranCode = "cb2200_sign";
$source='';
$len = count($this->arrReturn)-1;$j=1;
foreach($this->arrReturn as $v){
if($j<=$len){
$source.=$v."|";
}
$j++;
}
$source= substr($source, 0,strlen($source)-1);
$fp= stream_socket_client($this->socket,$errno, $errstr, 30);
$retMsg="";
if (!$fp) {
log_message("info","socket连接失败");
return false;
} else
{
$in = "<?xml version='1.0' encoding='gbk2312'?>";
$in .= "<Message>";
$in .= "<TranCode>".$tranCode."</TranCode>";
$in .= "<MsgContent>".$source."</MsgContent>";
$in .= "</Message>";
fwrite($fp, $in);
while (!feof($fp)) {
$retMsg =$retMsg.fgets($fp, 1024);
}
fclose($fp);
}
if(false!==$xml_arr=$this->xmlParse($retMsg)){
if(is_array($xml_arr)){
foreach($xml_arr as $k=>$v){
$this->arrReturn[$k]=$v;
}
}else{
return false;
}
}else{
return false;
}
return $this->arrReturn;
}
/**
* 解析XML
*/
public function xmlParse($retMsg){
$arr=array();
//解析返回xml
$dom = new DOMDocument;
$dom->loadXML($retMsg);
$retCode = $dom->getElementsByTagName('retCode');
$retCode_value = $retCode->item(0)->nodeValue;
$errMsg = $dom->getElementsByTagName('errMsg');
$errMsg_value = $errMsg->item(0)->nodeValue;
$signMsg = $dom->getElementsByTagName('signMsg');
$signMsg_value = $signMsg->item(0)->nodeValue;
$orderUrl = $dom->getElementsByTagName('orderUrl');
$orderUrl_value = $orderUrl->item(0)->nodeValue;
$MerchID = $dom->getElementsByTagName('MerchID');
$merID = $MerchID->item(0)->nodeValue;
if($retCode_value != "0"){
log_message("info","交易返回码:".$retCode_value);
log_message("info","交易错误信息:".$errMsg_value);
return false;
}
$arr['merSignMsg'] = $signMsg_value;
$arr['merID'] = $merID;
$arr['orderUrl'] = $orderUrl_value;
return $arr;
}
/**
* 交通银行 支付通知
* @return boolean|unknown
*/
public function notify(){
$tranCode = "cb2200_verify";
if(!isset($_REQUEST['notifyMsg'])){
log_message("error","网银支付通知·非法请求");
return false;
}
$notifyMsg = $_REQUEST["notifyMsg"];
log_message("error",$notifyMsg."回调....");
$lastIndex = strripos($notifyMsg,"|");
$signMsg = substr($notifyMsg,$lastIndex+1); //签名信息
$srcMsg = substr($notifyMsg,0,$lastIndex+1);//原文
$merID = $this->config->item('merID');
$fp = stream_socket_client($this->socket, $errno, $errstr, 30);
$retMsg="";
//
if (!$fp) {
echo "$errstr ($errno)<br />\n";
log_message("error","$errstr ($errno)<br />\n");
} else{
$in = "<?xml version='1.0' encoding='gb2312'?>";
$in .= "<Message>";
$in .= "<TranCode>".$tranCode."</TranCode>";
$in .= "<merchantID>".$merID."</merchantID>";
$in .= "<MsgContent>".$notifyMsg."</MsgContent>";
$in .= "</Message>";
fwrite($fp, $in);
while (!feof($fp)) {
$retMsg =$retMsg.fgets($fp, 1024);
}
fclose($fp);
}
//解析返回xml
$dom = new DOMDocument;
$dom->loadXML($retMsg);
$retCode = $dom->getElementsByTagName('retCode');
$retCode_value = $retCode->item(0)->nodeValue;
$errMsg = $dom->getElementsByTagName('errMsg');
$errMsg_value = $errMsg->item(0)->nodeValue;
if($retCode_value != '0')
{
log_message("error","交易错误信息:" .$errMsg_value."<br>");
return false;
}else{
$arr = preg_split("/\|{1,}/",$srcMsg);
if($arr[9]=="1"){
return $this->updateBill($arr[1]);
}
log_message("error","交易失败:".$arr[13]."<br/>");
return false;
}
}
private function updateBill($billNo){
// 更新 订单状态
}
//end class
}
2.3 控制器
$this->load->model("Bocom");
支付方法:
$this->arrData =$this->Bocom->pay($this->data);
通知:
$this->arrData =$this->Bocom->notify();
|
memcached是一个超高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载了,现在我们就来看看如何配置memcached吧,希望能帮助到大家。
memcached的基本命令(安装、卸载、启动、配置相关)
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
memcached的基本命令(当memcached 启动后 用于对memcached管理的数据和本身运行状态相关的命令):
Command |
Description |
Example |
get |
Reads a value |
get mykey |
set |
Set a key unconditionally |
set mykey 0 60 5 |
add |
Add a new key |
add newkey 0 60 5 |
replace |
Overwrite existing key |
replace key 0 60 5 |
append |
Append data to existing key |
append key 0 60 15 |
prepend |
Prepend data to existing key |
prepend key 0 60 15 |
incr |
Increments numerical key value by given number |
incr mykey 2 |
decr |
Decrements numerical key value by given number |
decr mykey 5 |
delete |
Deletes an existing key |
delete mykey |
flush_all |
Invalidate specific items immediately |
flush_all |
Invalidate all items in n seconds |
flush_all 900 |
stats |
Prints general statistics |
stats |
Prints memory statistics |
stats slabs |
Prints memory statistics |
stats malloc |
Print higher level allocation statistics |
stats items |
stats detail |
stats sizes |
Resets statistics |
stats reset |
version |
Prints server version. |
version |
verbosity |
Increases log level |
verbosity |
quit |
Terminate telnet session |
quit |
对查看的信息的关键字中英文对照表
pid
|
memcache服务器的进程ID
|
uptime
|
服务器已经运行的秒数
|
time
|
服务器当前的unix时间戳
|
version
|
memcache版本
|
pointer_size
|
当前操作系统的指针大小(32位系统一般是32bit)
|
rusage_user
|
进程的累计用户时间
|
rusage_system
|
进程的累计系统时间
|
curr_items
|
服务器当前存储的items数量
|
total_items
|
从服务器启动以后存储的items总数量
|
bytes
|
当前服务器存储items占用的字节数
|
curr_connections
|
当前打开着的连接数
|
total_connections
|
从服务器启动以后曾经打开过的连接数
|
connection_structures
|
服务器分配的连接构造数
|
cmd_get
|
get命令(获取)总请求次数
|
cmd_set
|
set命令(保存)总请求次数
|
get_hits
|
总命中次数
|
get_misses
|
总未命中次数
|
evictions
|
为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
|
bytes_read
|
总读取字节数(请求字节数)
|
bytes_written
|
总发送字节数(结果字节数)
|
limit_maxbytes
|
分配给memcache的内存大小(字节)
|
threads
|
当前线程数
|
下面是一段简单的测试代码,代码中对标识符为 'mykey' 的对象数据进行存取操作:
代码如下 |
复制代码 |
<?php
// 包含 memcached 类文件
require_once('memcached-client.php');
// 选项设置
$options = array(
'servers' => array('192.168.1.1:11211'), //memcached 服务的地址、端口,可用多个数组元素表示多个 memcached 服务
'debug' => true, //是否打开 debug
'compress_threshold' => 10240, //超过多少字节的数据时进行压缩
'persistant' => false //是否使用持久连接
);
// 创建 memcached 对象实例
$mc = new memcached($options);
// 设置此脚本使用的唯一标识符
$key = 'mykey';
// 往 memcached 中写入对象
$mc->add($key, 'some random strings');
$val = $mc->get($key);
echo "n".str_pad('$mc->add() ', 60, '_')."n";
var_dump($val);
// 替换已写入的对象数据值
$mc->replace($key, array('some'=>'haha', 'array'=>'xxx'));
$val = $mc->get($key);
echo "n".str_pad('$mc->replace() ', 60, '_')."n";
var_dump($val);
// 删除 memcached 中的对象
$mc->delete($key);
$val = $mc->get($key);
echo "n".str_pad('$mc->delete() ', 60, '_')."n";
var_dump($val);
?> |
是不是很简单,在实际应用中,通常会把数据库查询的结果集保存到 memcached 中,下次访问时直接从 memcached 中获取,而不再做数据库查询操作,这样可以在很大程度上减轻数据库的负担。通常会将 SQL 语句 md5() 之后的值作为唯一标识符 key。下边是一个利用 memcached 来缓存数据库查询结果集的示例(此代码片段紧接上边的示例代码):
代码如下 |
复制代码 |
<?php
$sql = 'SELECT * FROM users';
$key = md5($sql); //memcached 对象标识符
if ( !($datas = $mc->get($key)) ) {
// 在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";
$conn = mysql_connect('localhost', 'test', 'test');
mysql_select_db('test');
$result = mysql_query($sql);
while ($row = mysql_fetch_object($result))
$datas[] = $row;
// 将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
$mc->add($key, $datas);
} else {
echo "n".str_pad('Read datas from memcached.', 60, '_')."n";
}
var_dump($datas);
?>
|
可以看出,使用 memcached 之后,可以减少数据库连接、查询操作,数据库负载下来了,脚本的运行速度也提高了。
好啦,至此memcached基本架设完成了,如果有啥问题或者有啥偶说的不对的欢迎来联系偶
下面整理了php识别中文编码并自动转换为UTF-8几个例子,这些例子非常的不错,希望对各位有帮助。
php自动识别编码,若里面有中文的话,将其转换为UTF-8就最好了,因为中文在Gbk编辑情况情况下,有可能会乱码,这个和客户端和服务端编码都有关系,为了避免乱码,我们可以使用下面的函数将其自动转换为UTF8国际标准编码:
代码如下 |
复制代码 |
<?php
function characet($data){
if( !empty($data) ){
$fileType = mb_detect_encoding()($data , array('UTF-8','GBK','LATIN1','BIG5')) ;
if( $fileType != 'UTF-8'){
$data = mb_convert_encoding($data ,'utf-8' , $fileType);
}
}
return $data;
}
?>
|
补充:文件编码转换
代码如下 |
复制代码 |
$temstr=file_get_contents($path);
$encode = mb_detect_encoding($temstr,"ASCII,UTF-8,CP936,EUC-CN,BIG-5,EUC-TW");
$temstr=mb_convert_encoding($temstr, "CP936", $encode);
|
例子
代码如下 |
复制代码 |
<?php
$f=fopen("test.txt", "wb");
$text=utf8_encode("a!");
//先用函数utf8_encode将所需写入的数据变成UTF编码格式。
$text="\\xEF\\xBB\\xBF".$text;
//"\\xEF\\xBB\\xBF",这串字符不可缺少,生成的文件将成为UTF-8格式,否则依然是ANSI格式。
fputs($f, $text);
//写入。
fclose($f);
?>
|
这是一款基于jquery Ajax实现文件无刷新上传文件例子,下面我们一起来看看吧,希望例子能帮助到各位同学哦。
PHP + jQuery Ajax文件上传实例。因为看到一些朋友询问如何实现PHP环境下的网页上传功能,自己这几天刚用了jQuery_upload_multiple上传插件,所以在这里把用法给大家说一下。
要实现基于这个插件的上传功能,其实挺简单,需要jquery就行了,另外还有一个上传文件时的PHP程序,费话不多说,先看下面的HTML,也就是带有上传表单,让用户选择上传文件的页面:
代码如下 |
复制代码 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Easy Ajax FormData Upload Multiple Images</title>
<script type="text/javascript"" width=100% src="/ajaxjs/jquery-1.6.2.min.js"></script><!--此处可引用你实际路径的jquery插件-->
</head>
<body>
<style>
#feedback{width:1200px;margin:0 auto;}
#feedback img{float:left;width:300px;height:300px;}
#ZjmainstaySignaturePicture,#addpicContainer{float:left;width: 100%;}
#addpicContainer{margin-left:5px;}
#ZjmainstaySignaturePicture img{width: 535px;}
#addpicContainer img{float: left;}
.loading{display:none;background:url("http://f7-preview.awardspace.com/zjmainstay.co.cc/jQueryExample/jquery_upload_image/files/ui-anim_basic_16x16.gif") no-repeat scroll 0 0 transparent;float: left;padding:8px;margin:18px 0 0 18px;}
</style>
<div id="addpicContainer">
<!-- 利用multiple="multiple"属性实现添加多图功能 -->
<!-- position: absolute;left: 10px;top: 5px;只针对本用例将input隐至图片底下。-->
<!-- height:0;width:0;z-index: -1;是为了隐藏input,因为Chrome下不能使用display:none,否则无法添加文件 -->
<!-- onclick="getElementById('inputfile').click()" 点击图片时则点击添加文件按钮 -->
<img onclick="getElementById('inputfile').click()" style="cursor:pointer;border: 1px solid #AABBCC;" title="点击添加图片" alt="点击添加图片"" width=100% src="http://f7-preview.awardspace.com/zjmainstay.co.cc/jQueryExample/jquery_upload_image/files/addfile.jpg">
<input type="file" multiple="multiple" id="inputfile" style="height:0;width:0;z-index: -1; position: absolute;left: 10px;top: 5px;"/>
<span class="loading"></span>
</div>
<div id="feedback"></div><!-- 响应返回数据容器 -->
<script type="text/javascript">
$(document).ready(function(){
//响应文件添加成功事件
$("#inputfile").change(function(){
//创建FormData对象
var data = new FormData();
//为FormData对象添加数据
$.each($('#inputfile')[0].files, function(i, file) {
data.append('upload_file'+i, file);
});
$(".loading").show(); //显示加载图片
//发送数据
$.ajax({
url:'submit_form_process.php',
type:'POST',
data:data,
cache: false,
contentType: false, //不可缺参数
processData: false, //不可缺参数
success:function(data){
data = $(data).html();
//第一个feedback数据直接append,其他的用before第1个( .eq(0).before() )放至最前面。
//data.replace(/</g,'<').replace(/>/g,'>') 转换html标签,否则图片无法显示。
if($("#feedback").children('img').length == 0) $("#feedback").append(data.replace(/</g,'<').replace(/>/g,'>'));
else $("#feedback").children('img').eq(0).before(data.replace(/</g,'<').replace(/>/g,'>'));
$(".loading").hide(); //加载成功移除加载图片
},
error:function(){
alert('上传出错');
$(".loading").hide(); //加载失败移除加载图片
}
});
});
});
</script>
</body>
</html> |
接下来是上传图片的PHP文件代码:文件名:submit_form_process.php
代码如下 |
复制代码 |
<?php
header('content-type:text/html charset:utf-8');
$dir_base = "./files/"; //文件上传根目录
//没有成功上传文件,报错并退出。
if(empty($_FILES)) {
echo "<textarea><img" width=100% src='{$dir_base}error.jpg'/></textarea>";
exit(0);
}
$output = "<textarea>";
$index = 0; //$_FILES 以文件name为数组下标,不适用foreach($_FILES as $index=>$file)
foreach($_FILES as $file){
$upload_file_name = 'upload_file' . $index;//对应index.html FomData中的文件命名
$filename = $_FILES[$upload_file_name]['name'];
$gb_filename = iconv('utf-8','gb2312',$filename); //名字转换成gb2312处理
//文件不存在才上传
if(!file_exists($dir_base.$gb_filename)) {
$isMoved = false; //默认上传失败
$MAXIMUM_FILESIZE = 1 * 1024 * 1024; //文件大小限制 1M = 1 * 1024 * 1024 B;
$rEFileTypes = "/^\.(jpg|jpeg|gif|png){1}$/i";
if ($_FILES[$upload_file_name]['size'] <= $MAXIMUM_FILESIZE &&
preg_match($rEFileTypes, strrchr($gb_filename, '.'))) {
$isMoved = @move_uploaded_file ( $_FILES[$upload_file_name]['tmp_name'], $dir_base.$gb_filename); //上传文件
}
}else{
$isMoved = true;//已存在文件设置为上传成功
}
if($isMoved){
//输出图片文件<img>标签
//注:在一些系统src可能需要urlencode处理,发现图片无法显示,
// 请尝试 urlencode($gb_filename) 或 urlencode($filename),不行请查看HTML中显示的src并酌情解决。
$output .= "<img" width=100% src='{$dir_base}{$filename}' title='{$filename}' alt='{$filename}'/>";
}else {
$output .= "<img" width=100% src='{$dir_base}error.jpg' title='{$filename}' alt='{$filename}'/>";
}
$index++;
}
echo $output."</textarea>";
|
下面来看一个php模仿百度spider蜘蛛爬虫程序例子了,这个代码写得比较高级了我就不分析了,大家有需要的可以进入参考一下吧。
自己用PHP写了个爬虫,基本功能已经实现
linux 环境下运行#php spider.php http://www.111cn.net
下面为测试过程图
下面为测试结果
有兴趣的可以试试
脚本缺点:
1.未对静态页面进行去重处理
2.未对页面内js操作后的结果进行处理
代码如下 |
复制代码 |
<?php
#加载页面
function curl_get($url){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HEADER,1);
$result=curl_exec($ch);
$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);
if($code!='404' && $result){
return $result;
}
curl_close($ch);
}
#获取页面url链接
function get_page_urls($spider_page_result,$base_url){
$get_url_result=preg_match_all("/<[a|A].*?href=[\'\"]{0,1}([^>\'\"\ ]*).*?>/",$spider_page_result,$out);
if($get_url_result){
return $out[1];
}else{
return;
}
}
#相对路径转绝对路径
function xdtojd($base_url,$url_list){
if(is_array($url_list)){
foreach($url_list as $url_item){
if(preg_match("/^(http:\/\/|https:\/\/|javascript:)/",$url_item)){
$result_url_list[]=$url_item;
}else {
if(preg_match("/^\//",$url_item)){
$real_url = $base_url.$url_item;
}else{
$real_url = $base_url."/".$url_item;
}
#$real_url = 'http://www.sumpay.cn/'.$url_item;
$result_url_list[] = $real_url;
}
}
return $result_url_list;
}else{
return;
}
}
#删除其他站点url
function other_site_url_del($jd_url_list,$url_base){
if(is_array($jd_url_list)){
foreach($jd_url_list as $all_url){
echo $all_url;
if(strpos($all_url,$url_base)===0){
$all_url_list[]=$all_url;
}
}
return $all_url_list;
}else{
return;
}
}
#删除相同URL
function url_same_del($array_url){
if(is_array($array_url)){
$insert_url=array();
$pizza=file_get_contents("/tmp/url.txt");
if($pizza){
$pizza=explode("\r\n",$pizza);
foreach($array_url as $array_value_url){
if(!in_array($array_value_url,$pizza)){
$insert_url[]=$array_value_url;
}
}
if($insert_url){
foreach($insert_url as $key => $insert_url_value){
#这里只做了参数相同去重处理
$update_insert_url=preg_replace('/=[^&]*/','=leesec',$insert_url_value);
foreach($pizza as $pizza_value){
$update_pizza_value=preg_replace('/=[^&]*/','=leesec',$pizza_value);
if($update_insert_url==$update_pizza_value){
unset($insert_url[$key]);
continue;
}
}
}
}
}else{
$insert_url=array();
$insert_new_url=array();
$insert_url=$array_url;
foreach($insert_url as $insert_url_value){
$update_insert_url=preg_replace('/=[^&]*/','=leesec',$insert_url_value);
$insert_new_url[]=$update_insert_url;
}
$insert_new_url=array_unique($insert_new_url);
foreach($insert_new_url as $key => $insert_new_url_val){
$insert_url_bf[]=$insert_url[$key];
}
$insert_url=$insert_url_bf;
}
return $insert_url;
}else{
return;
}
}
$current_url=$argv[1];
$fp_puts = fopen("/tmp/url.txt","ab");//记录url列表
$fp_gets = fopen("/tmp/url.txt","r");//保存url列表
$url_base_url=parse_url($current_url);
if($url_base_url['scheme']==""){
$url_base="http://".$url_base_url['host'];
}else{
$url_base=$url_base_url['scheme']."://".$url_base_url['host'];
}
do{
$spider_page_result=curl_get($current_url);
#var_dump($spider_page_result);
$url_list=get_page_urls($spider_page_result,$url_base);
#var_dump($url_list);
if(!$url_list){
continue;
}
$jd_url_list=xdtojd($url_base,$url_list);
#var_dump($jd_url_list);
$result_url_arr=other_site_url_del($jd_url_list,$url_base);
var_dump($result_url_arr);
$result_url_arr=url_same_del($result_url_arr);
#var_dump($result_url_arr);
if(is_array($result_url_arr)){
$result_url_arr=array_unique($result_url_arr);
foreach($result_url_arr as $new_url) {
fputs($fp_puts,$new_url."\r\n");
}
}
}
while ($current_url = fgets($fp_gets,1024));//不断获得url
preg_match_all("/<a[^>]+href=[\"']([^\"']+)[\"'][^>]+>/",$spider_page_result,$out);
# echo a href
#var_dump($out[1]);
?>
|
标签:[!--infotagslink--]