项目中需要用到经常采集搜索引擎的数据,而百度,google等对短时间内大流量搜索做了限制,会限制IP(百度) 等,google的更是做了识别本机生成cookie(猜测) 的限制,模拟cookie都不行。
大多数采集器都做了自动重启IP的功能, 当采集页面匹配到做了限制的 正则时,执行重启IP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
| //$this->noData 为匹配限制的页面正则, $this->page 为页面内容,可用file_get_content()获取
if(preg_match($this->noData,$this->page)){
$this->reStartRouter();
}
//操作路由
function router($target=''")
{
$server = '192.168.0.1'; // IP address
$host = '192.168.0.1'; // Domain name
$port = 80;
$referer = 'http://'.$host.$target; // Referer
$username = "admin";#路由的用户名
$password = "admin";#路由的管理密码
$authorization = base64_encode($username.":".$password);
$File = fsockopen($server, $port, $errno, $errstr, 50);
if ($File)
{
$out = "GET $target HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Referer: $referer\r\n";
$out .= "Authorization: Basic $authorization\r\n";
$out .= "Connection: Close\r\n\r\n";
fputs($File, $out);
$makeFile = $buffer = "";
while ($buffer = fread($File,4096))
{
$makeFile = $makeFile.$buffer;
}
fclose($File);
return $makeFile;
}
}
//断开
function disconnectr() {
$url = '/if.cgi?redirect=sys_status.htm&failure=fail.htm&type=wan_state_reset&ifname=ppp0&ifstatus=Up&ifcmd=DISCONNECT';
router($url);
}
//连接
function connectr() {
$url = '/if.cgi?redirect=sys_status.htm&failure=fail.htm&type=wan_state_reset&ifname=ppp0&ifstatus=Down&ifcmd=CONNECT';
router($url);
}
function reStartRouter()
{
$r=new router();
$r->disconnectr();//断开
$r->connectr();//连接
sleep(3);//静止3秒,一般要过一会才可以 连上
return true;
} |
1、<!--页面注解-->
2、<html>
3、<head>
4、<title>页面标题</title>
5、<meta http-equiv=Content-Language content=zh-cn>
6、</meta><meta http-equiv="Content-Type" content="text/html; charset=gb2312">
7、</meta><meta name="keywords" content="关键词">
8、</meta><meta name="description" content="网站描述">
9、<link href="inc/css.css" type="text/css" rel="stylesheet">
10、</link></meta></head>
11、<body>
12、<div>
13、<h1>页面内容标题</h1>
14、<h2>页面相关性标题</h2>
15、<h3>标题系列</h3>
16、<h4>标题系列</h4>
17、<h5>标题系列</h5>
18、<h6>标题系列</h6>
19、<img src="xxx.jpg" alt="图片说明"/>
20、<a href="/" title="链接说明">链接词</a>
21、<strong>重点关键词强调</strong>
22、<b>关键词强调</b><u>关键词强调</u><i>关键词强调</i>
23、</div>
25、<div>
26、版权部分关键词强调
27、</div>
28、</body>
29、</html>
********************************************************
注:在
..标签区中的罗列,都是一些基础的HTML标签,这些标签出现的次序是可以变化的。
下面来给大家详细解答一下。
阅读全文…
thinkphp 使用U方法支持分组
U方法可以用来动态的生成需要的URL地址,如果使用了分组模式,我们仍然可以使用U方法。
U(‘/Admin-User/add’);
生成的URL表示Admin分组的User模块的add操作,注意 Admin-User 之间的“-” 是固定的
同样的道理,我们在Action类的redirect方法中也可以这样使用
$this->redirect(‘/Admin-User/add’);
Thinkphp 设置默认时区
有些应用所在的服务器和访问的区域间隔较大,导致服务器时间不准确,我们可以通过设置默认时区的方法来处理。
我们只需要在项目配置文件中添加:
‘DEFAULT_TIMEZONE’=>’Asia/Singapore’ // 设置默认时区为新加坡
in_array — 检查数组中是否存在某个值
例子:
1
2
3
4
5
6
7
8
9
| <?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}
if (in_array("mac", $os)) {
echo "Got mac";
}
?> |
array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
例子:
1
2
3
4
5
6
7
| <?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
?> |
用处
判断变量是否在数组中( in_array )
对不在其一数组中的键值进行操作:
例:
1
2
3
4
5
6
7
8
| $subArr=array('0'=>'isTitle','1'=>'isUrl','2'=>'isIntro','3'=>'isAuthor','4'=>'isPub_Date','5'=>'isPub_Time', );
$notSelect = array_diff($subArr,$data); //取数组交集,判断没有选中的对象
foreach($notSelect AS $key=>$val)
{
$queryNo[]=$val.'=0';
}
$queryNo=implode(',',$queryNo);
$queryNo= " UPDATE ...... "; |
你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起 。 —– Arthur J.Riel
(1)所有数据都应该隐藏在所在的类的内部。
(2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。
(3)尽量减少类的协议中的消息。
(4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。
(5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。
如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。
(6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。
(7)类之间应该零耦合,或者只有导出耦合关系。也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。
(8)类应该只表示一个关键抽象。
包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响 .
(9)把相关的数据和行为集中放置。
设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。这种类型的行为暗示着这条经验原则被违反了。
(10)把不相关的信息放在另一个类中(也即:互不沟通的行为)。
朝着稳定的方向进行依赖.
阅读全文…
原文链接:http://tomore.myoow.com/showlog351.html
===================================================
memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端, 同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!基于memcached作者对分布式cache的理解和解决方案。memcached完全可以用到其他地方 比如分布式数据库, 分布式计算等领域。
阅读全文…
前面写过一篇PHP读取EXCEL插入Mysql数据库中,应用phpExcelReader导入, 这次做毕业设计时用的ThinkPHP,有个上传学生信息(excel)插入数据库的功能,其实原理一样,先是上传,然后读取内容,然后根据phpExcelReader的read读取各sheet值然后插入数据库。其代码为:
import.html
1
2
3
4
5
6
7
| <form method="post" action="__URL__/import" name="form1" enctype="multipart/form-data">
<table cellspacing="0" cellpadding="0" border="1">
<tr>
<td ><input type="file" name="myfile" /> <input type="submit" class="mybutton" name="import" value="导入" ></td>
</tr>
</table>
</form> |
StudentsAction.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| class StudentsAction extends Action
{
public function import()
{
header("Content-Type:text/html; charset=utf-8");
Vendor('Excel.reader'); // 加载reader类。
if(!$this->isPost())
{
$this->display();
}
else
{
if($_FILES['myfile']['name']!='')
{
$tmp_file=$_FILES['myfile']['tmp_name'];
$file_types=explode(".",$_FILES['myfile']['name']);
$file_type=$file_types[count($file_types)-1];
if(strtolower($file_type)!="xls"){
// echo "<span style=\"color:red;line-height: 25px;\">格式错误 <a href=\"#\" onclick=history.go(-1);>请返回</a> </span>";
$this->assign('jumpUrl',__URL__/import);
$msg="格式错误,请重新上传";
$this->success($msg);
}
$savePath="Excel/xls/";
$str = date('Ymdhis');
$file_name=$str.".".$file_type;
if(!copy($tmp_file,$savePath.$file_name)){
//echo "<span style=\"color:red;line-height: 25px;\">上传错误请重试!!<a href=# onclick=history.go(-1);>[返回]</a></span>";
$this->assign('jumpUrl',__URL__/import);
$msg="上传错误,请重新上传";
$this->success($msg);
}else{
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('utf-8');
$data->read("Excel/xls/".$file_name);
for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++) {
$number=$data->sheets[0]['cells'][$i][1]; $passwd=$data->sheets[0]['cells'][$i][1]; $name=$data->sheets[0]['cells'][$i][2];
$catid=$data->sheets[0]['cells'][$i][3];
$sex=$data->sheets[0]['cells'][$i][4];
$tel=$data->sheets[0]['cells'][$i][5];
$home=$data->sheets[0]['cells'][$i][6];
$minzu=$data->sheets[0]['cells'][$i][7];
$Students=D("Students");
$info=array(
'number'=>$number,
'passwd'=>$passwd,
'name'=>$name,
'catid'=>$catid,
'sex'=>$sex,
'tel'=>$tel,
'home'=>$home,
'minzu'=>$minzu,
);
$Students->create($info);
$Students->add();
}
$this->assign('jumpUrl',__URL__);
$msg="学生信息导入成功";
$this->success($msg);
}
}
}
}
} |
原文地址:http://52php.com.cn/index.php/archives/6/
总结:
$_REQUEST、$_GET、$_POST、$_COOKIE 的关系和区别。
1.关系:$_REQUEST包含了$_GET、$_POST、$_COOKIE的所有内容,是它们的集合体。
2.$_GET、$_POST、$_COOKIE在$_REQUEST中都有一个副本。改变$_REQUEST的值不影响$_GET等,反之亦然。
3.GET和POST同名的情况下,$_REQUEST取的是POST的值。COOKIE与GET或POST重名的情况下,$_REQUEST取的是COOKIE的值。COOKIE的优先级最高。
测试开始。
测试1:
echo ‘
';//源格式打印
//URL加上m=xxoo来测试$_GET
print_r($_REQUEST);//首先打印内容
print_r($_GET);
$_REQUEST = array();//清空$_REQUEST
echo $_GET['m'];
echo '
‘;
测试结果:$_GET['m']的值是xxoo。
测试2:
echo ‘
';//源格式打印
//URL加上m=xxoo来测试$_GET
print_r($_REQUEST);
print_r($_GET);
$_GET = array();//清空
print_r($_REQUEST);
echo '
‘;
测试结果:$_REQUEST['m']的值是xxoo。
结论:对$_REQUEST的操作没有影响到$_GET,反之亦然。$_REQUEST只是包含了一个$_GET的副本(the same as $_POST 哈哈)。
————————————华丽的分隔线
—————————————————
好。继续
测试3
//POST-GET重名测试
//从其他页面POST传送一个m的值为post,action地址加上m=get
print_r($_REQUEST);
print_r($_GET);
print_r($_POST);
结果:$_REQUEST['m'] == ‘post’。
结论:同时提交GET和POST且同名,$_REQUEST取的是POST的值。(可能是POST优先级更高。)
测试4
//cookie与post\get 重名测试
setcookie(‘m’, ‘cookie’, time()+3600);//先把COOKIE种上,名字为m,值为cookie。然后刷新。(COOKIE要刷新才生效)
//从其他页面POST传送一个m的值为post,action地址加上m=get
print_r($_REQUEST);
结果:$_REQUEST['m'] == ‘cookie’。结论:COOKIE的优先级最高。
Recent Comments