php天气小偷程序,可自动识别IP地址
tp.php 文件:
<?
/*
tq 天气
qs 趋势
rq 日期
wd 温度
fx 风向
address 地址
qq 805830
*/
include_once('./include/tq/function.inc.php');
$staid = sta_id();
$ip = getIp();
//$address = convertip($ip);
$address = addr();
echo $address." ";
function open($file,$type=''){
if($open=file($file)){
$count=count($open);
for($i=0;$i<$count;$i++){
$theget.=$open[$i];
}
}else{
die('请求过多,超时,请刷新');
}
return $theget;
}
$_str = open('http://www.weathercn.com/tqyb/detail.jsp?sta_id='.$staid);
//echo $_str;
/**
变量说明:
$str 要进行操作的字符串;
$split 拆分目标字符(串);
$from_no 从第几个开始;
$desc_y_n 顺取(〉0的值)还是倒取(0);
*/
//$_str = "aaa .1..aaa.2..aaa .3..aaa.4..aaa.5..bbb..7.bbb.8..bbb.9..bbb.10..bbb";
$split_a = "中国气象局";
$split_b = "时至";
$str_b = strstr($_str,$split_b);//寻找$split_b第一次出现的位置
$str_a = substr($_str,0,strpos($_str, $split_b));//可以取得字符串的指定长度子字符串
function _getStr_from_to($str,$split,$from_no,$desc_y_n)
{
$arr = explode($split,$str);
$size = sizeof($arr);
$from_no = ($from_no<=$size) ? $from_no : $size;
unset($_tmp_out_str);
if($desc_y_n)
{
//正序
for($i=$from_no;$i<$size;$i++)
{
$_tmp_out_str .= $split.$arr[$i];
}
}
else
{
$_tmp_from = $size - $from_no;
for($i=0;$i<$_tmp_from;$i++)
{
$_tmp_out_str .= $arr[$i].$split;
}
}
return $_tmp_out_str;
}
$srting = _getStr_from_to($str_a,"中国气象局",1,1);
//echo $srting;
preg_match_all('/alt="([^"]*)"/',$srting,$tq);
$tq = $tq[1];
if (is_array($tq))
$tq = implode('转',$tq);
//print_r($tq);
echo $tq." ";
preg_match_all('/([0-9-]*℃)~([0-9-]*℃)/',$srting,$wd);
$wd = $wd[0];
$wd = $wd[0];
print_r($wd);
?>
复制代码function.inc.php 文件
<?php
// 获取用户IP地址
function getIp() {
if($_SERVER['HTTP_CLIENT_IP'])
{
return $_SERVER['HTTP_CLIENT_IP'];
} elseif ($_SERVER['HTTP_X_FORWARDED_FOR']) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
return $_SERVER['REMOTE_ADDR'];
}
}
function getFile($url)
{
if($f=fopen("$url","r"))
{
while(!feof($f))
{
$s.=fgets($f);
}
fclose($f);
return $s;
} else {
return false;
}
}
function putFile($file_name,$file_string)
{
if($f=fopen($file_name,"w"))
{
fwrite($f, $file_string);
}
fclose($f);
}
function cnSubStr($string,$sublen) {
if($sublen>=strlen($string)){
return $string;
}
$s="";
for($i=0;$i<$sublen;$i++){
if(ord($string{$i})>127){
$s.=$string{$i}.$string{++$i};
continue;
}else{
$s.=$string{$i};
continue;
}
}
return $s."...";
}
function getPageBar($count = 0)
{
$bad_link_color = "#C0C0C0";
$page["url"] = eregi_replace("&page=[^&]+","",basename($_SERVER[SCRIPT_NAME])."?".$_SERVER[QUERY_STRING]);
$page["result_count"] = (string) $count;
$page["this_page"] = (empty($_GET["page"]))?"1":$_GET["page"];
$page["this_page"] = ($page["result_count"] == 0)?"0":$page["this_page"];
$page["page_size"] = $GLOBALS["option"]["page_size"];
$page["page_count"] = (string) ceil($page["result_count"]/$page["page_size"]);
$page["first_page"] = ($page["this_page"] > 1)?"<a href="".$page["url"]."&page=1" title="首页"><span style="font-size:12px; font-weight: bold; font-familly: Courier;">«</span></a>":"";
$page["rearward_page"] = ($page["this_page"] < (int) $page["page_count"])?"<a href="".$page["url"]."&page=".$page["page_count"]."" title="末页"><span style="font-size:12px; font-weight: bold; font-familly: Courier;">»</span></a>":"";
$page["prev_page"] = ($page["this_page"] > 1)?"<a href="".$page["url"]."&page=".((int)$page["this_page"] - 1)."" title="上一页"><span style="font-size:12px; font-weight: bold; font-familly: Courier;">‹</span></a>":"";
$page["next_page"] = ($page["this_page"] < (int) $page["page_count"])?"<a href="".$page["url"]."&page=".((int)$page["this_page"] + 1)."" title="下一页"><span style="font-size:12px; font-weight: bold; font-familly: Courier;">›</span></a>":"";
$page['start_page'] = ((int)$page["this_page"]-5<1)?1:(int)$page["this_page"]-5;
$page['end_page'] = ((int)$page["this_page"]+5 > $page['page_count'])?(int)$page["page_count"]:(int)$page["this_page"]+5;
for ($i = $page['start_page'];$i <= $page['end_page'];$i++)
{
$selected = ($_GET["page"] == $i)?"selected":"";
$page["page_select"] .= "<option value="$i" $selected>$i</option>";
$page["page_list"] .= ($i == $page["this_page"])?" <font color="red">$i</font> ":"<a href="".$page['url']."&page=$i" title="第 ".$i." 页">[$i]</a>";
}
return $page;
}
function getRows($table,$order='')
{
if (!empty($order))
{
$order = explode(',',$order);
$order = 'ORDER BY `'.$order[0].'` '.$order[1];
}
$query = dbQuery("SELECT * FROM `".$GLOBALS['prefix'].$table."` ".$order.";");
while ($row = dbArray($query))
{
$link[$row['id']] = $row;
}
return $link;
}
function autoTime($time)
{
preg_match('/([0-9]*)-([0-9]*)-([0-9]*) ([0-9]*):([0-9]*):([0-9]*)/',$time,$date);
return mktime ($date[4],$date[5],$date[6],$date[2],$date[3],$date[1]);
}
function getTime() {
$t = explode(' ', microtime());
return $t[1] + $t[0];
}
function calendar($time)
{
$start = mktime(0, 0, 0, date('m', $time), 1, date('Y', $time));
$prev_month['year'] = date('Y',$start-86400);
$prev_month['month'] = date('m',$start-86400);
$end = mktime(0, 0, 0, date('m', $time)+1, 1, date('Y', $time));
$next_month['year'] = date('Y',$end);
$next_month['month'] = date('m',$end);
$sWeekday=array('日','一','二','三','四','五','六');
//$sWeekday=array('S','M','T','W','T','F','S');
$title=date('M Y', $time);
$str = '';
$str .= <<<END
<table class="calendar" cellspacing="1">
<tr class="title">
<th colspan="1"><a href=?mod=article&year={$prev_month['year']}&month={$prev_month['month']}><span style="font-size:12px; font-weight: bold; font-familly: Courier;">«</span></a></td>
<th colspan="5">{$title}</td>
<th colspan="1"><a href=?mod=article&year={$next_month['year']}&month={$next_month['month']}><span style="font-size:12px; font-weight: bold; font-familly: Courier;">»</span></a></td>
</tr>
<tr class="head">
<th>{$sWeekday[0]}</td>
<th>{$sWeekday[1]}</td>
<th>{$sWeekday[2]}</td>
<th>{$sWeekday[3]}</td>
<th>{$sWeekday[4]}</td>
<th>{$sWeekday[5]}</td>
<th>{$sWeekday[6]}</td>
</tr>
<tr class="cbody">
END;
$year = (empty($_GET['year']))?date('Y'):$_GET['year'];
$month = (empty($_GET['month']))?date('m'):$_GET['month'];
$query = dbQuery("SELECT FROM_UNIXTIME(date,'%e') as `day`,count(*) as `count` FROM `".$GLOBALS['prefix']."article`,`".$GLOBALS['prefix']."article_class` WHERE FROM_UNIXTIME(date,'%Y/%m') = '".$year."/".$month."' AND `status` = 'published' AND ".$GLOBALS['prefix']."article.class_id = ".$GLOBALS['prefix']."article_class.id AND `in_main_page` = 1 GROUP BY `day`;");
for ($i = 0;$i < mysql_num_rows($query);$i++)
{
$row = dbArray($query);
$calendar[$row['day']] = $row['count'];
}
for ($i = 0;$i < date('w',$start);$i++)
{
$str.= '<td> </td>';
}
for($stamp=$start;$stamp<$end;$stamp+=86400) // loop through each day, which is 86400 seconds
{
$weekday=date('w', $stamp);
$day = date('d', $stamp);
if(date('Y-m-d', $stamp)==date('Y-m-d')) $style='today';
else if(date('w', $stamp)==0 || date('w', $stamp)==6) $style='weekend';
else $style='weekday';
$str.= " ".'<td class="'.$style.'">';
$str.= ($calendar[date('j', $stamp)] > 0)?'<a href="?mod=article&year='.$year.'&month='.$month.'&day='.$day.'">'.(int)$day.'</a>':(int)$day;
$str.= '</td>'." ";
if(date('w', $stamp)==6) $str.=" ".'</tr>'." ";
}
$str .= '</table>';
return $str;
}
//php利用纯真ip数据库查地址的函数
function convertip($ip) {
if(!preg_match("/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/", $ip)) {
return '';
}
if($fd = @fopen( "e:hostswkhddbipdatawry.dat", 'rb')) {//fopen()中是纯真ip数据库文件位置,请自行设定!
$ip = explode('.', $ip);
$ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];
$DataBegin = fread($fd, 4);
$DataEnd = fread($fd, 4);
$ipbegin = implode('', unpack('L', $DataBegin));
if($ipbegin < 0) $ipbegin += pow(2, 32);
$ipend = implode('', unpack('L', $DataEnd));
if($ipend < 0) $ipend += pow(2, 32);
$ipAllNum = ($ipend - $ipbegin) / 7 + 1;
$BeginNum = 0;
$EndNum = $ipAllNum;
while($ip1num > $ipNum || $ip2num < $ipNum) {
$Middle= intval(($EndNum + $BeginNum) / 2);
fseek($fd, $ipbegin + 7 * $Middle);
$ipData1 = fread($fd, 4);
if(strlen($ipData1) < 4) {
fclose($fd);
return '系统错误';
}
$ip1num = implode('', unpack('L', $ipData1));
if($ip1num < 0) $ip1num += pow(2, 32);
if($ip1num > $ipNum) {
$EndNum = $Middle;
continue;
}
$DataSeek = fread($fd, 3);
if(strlen($DataSeek) < 3) {
fclose($fd);
return '系统错误';
}
$DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
fseek($fd, $DataSeek);
$ipData2 = fread($fd, 4);
if(strlen($ipData2) < 4) {
fclose($fd);
return 'System Error';
}
$ip2num = implode('', unpack('L', $ipData2));
if($ip2num < 0) $ip2num += pow(2, 32);
if($ip2num < $ipNum) {
if($Middle == $BeginNum) {
fclose($fd);
return 'Unknown';
}
$BeginNum = $Middle;
}
}
$ipFlag = fread($fd, 1);
if($ipFlag == chr(1)) {
$ipSeek = fread($fd, 3);
if(strlen($ipSeek) < 3) {
fclose($fd);
return '系统错误';
}
$ipSeek = implode('', unpack('L', $ipSeek.chr(0)));
fseek($fd, $ipSeek);
$ipFlag = fread($fd, 1);
}
if($ipFlag == chr(2)) {
$AddrSeek = fread($fd, 3);
if(strlen($AddrSeek) < 3) {
fclose($fd);
return 'System Error';
}
$ipFlag = fread($fd, 1);
if($ipFlag == chr(2)) {
$AddrSeek2 = fread($fd, 3);
if(strlen($AddrSeek2) < 3) {
fclose($fd);
return 'System Error';
}
$AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
fseek($fd, $AddrSeek2);
} else {
fseek($fd, -1, SEEK_CUR);
}
while(($char = fread($fd, 1)) != chr(0))
$ipAddr2 .= $char;
$AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
fseek($fd, $AddrSeek);
while(($char = fread($fd, 1)) != chr(0))
$ipAddr1 .= $char;
} else {
fseek($fd, -1, SEEK_CUR);
while(($char = fread($fd, 1)) != chr(0))
$ipAddr1 .= $char;
$ipFlag = fread($fd, 1);
if($ipFlag == chr(2)) {
$AddrSeek2 = fread($fd, 3);
if(strlen($AddrSeek2) < 3) {
fclose($fd);
return 'System Error';
}
$AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
fseek($fd, $AddrSeek2);
} else {
fseek($fd, -1, SEEK_CUR);
}
while(($char = fread($fd, 1)) != chr(0))
$ipAddr2 .= $char;
}
fclose($fd);
if(preg_match('/http/i', $ipAddr2)) {
$ipAddr2 = '';
}
$ipaddr = "$ipAddr1"; // 完整地址为 "$ipAddr1 $ipAddr2"
$ipaddr = preg_replace('/CZ88.NET/is', '', $ipaddr);
$ipaddr = preg_replace('/^s*/is', '', $ipaddr);
$ipaddr = preg_replace('/s*$/is', '', $ipaddr);
if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {
$ipaddr = 'Unknown';
}
return $ipaddr;
} else {
$datadir = PHPCMS_ROOT.'./ipdata/';
$ip_detail = explode('.', $ip);
if(file_exists($datadir.$ip_detail[0].'.txt')) {
$ip_fdata = @fopen($datadir.$ip_detail[0].'.txt', 'r');
} else {
if(!($ip_fdata = @fopen($datadir.'0.txt', 'r'))) {
return 'Invalid IP data file';
}
}
for ($i = 0; $i <= 3; $i++) {
$ip_detail[$i] = sprintf('%03d', $ip_detail[$i]);
}
$ip = join('.', $ip_detail);
do {
$ip_data = fgets($ip_fdata, 200);
$ip_data_detail = explode('|', $ip_data);
if($ip >= $ip_data_detail[0] && $ip <= $ip_data_detail[1]) {
fclose($ip_fdata);
return $ip_data_detail[2].$ip_data_detail[3];
}
} while(!feof($ip_fdata));
fclose($ip_fdata);
return '未知地址';
}
}
// station_id 函数
function sta_id(){
include_once('./include/tq/config.inc.php');
include_once('./include/tq/error.inc.php');
include_once('./include/tq/mysql.inc.php');
include_once('./include/tq/template.inc.php');
unset($onlineip);
if($_SERVER['HTTP_CLIENT_IP']){
$onlineip=$_SERVER['HTTP_CLIENT_IP'];
}elseif($_SERVER['HTTP_X_FORWARDED_FOR']){
$onlineip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$onlineip=$_SERVER['REMOTE_ADDR'];
}
$ips = $onlineip;
$addr = convertip($ips);
$address = $addr;
$address = str_replace(array('省','市','县','工业','北京','区','大学','武汉','西安','安交','海交','新疆','大连','广西'),array(' ',' ',' ',' 工业','北京 ',' ',' ','武汉 ','西安 ','安 交','海 交','新疆 ','大连 ','广西 '),$address);
$addresss = explode(" ",$address);
$address1 = $addresss[0];
$address2 = $addresss[1];
$address3 = $addresss[2];
$address4 = $addresss[3];
$query = dbQuery("select count(*) as num from ".weather_station." where province like '$address1' ");//查询 省字段 数目
$row = dbArray($query);
$number = $row["num"];
if($number>0 && $address2<>'' && $address1<>上海 && $address1<>重庆){
unset($addresss[0]);
}
if($address4==''){
unset($addresss[3]);
}
if($address3==''){
unset($addresss[2]);
}
$query = dbQuery("select count(*) as num from ".weather_station." where station like '$address4' ");//查询 县 字段
$row = dbArray($query);
$number = $row["num"];
if($number==0){
unset($addresss[3]);
}
$query = dbQuery("select count(*) as num from ".weather_station." where station like '$address3' ");//查询 县 字段
$row = dbArray($query);
$number = $row["num"];
if($number==0){
unset($addresss[2]);
}
//数组数据2 查询开始
$queryx = dbQuery("select count(*) as nums from ".weather_station." where station like '$address2' ");//查询 县 字段
$row = dbArray($queryx);
$nums = $row["nums"];
$queryy = dbQuery("select count(*) as numd from ".weather_station." where district like '$address2' ");//查询 市 字段
$row = dbArray($queryy);
$numd = $row["numy"];
if($nums==0 && $numd==0){
unset($addresss[1]); // 如果 数组数据2 不在数据库里则删除数据2
}
//数组数据2 查询结束
$query = dbQuery("select count(*) as num from ".weather_station." where district like '$address2' ");//查询 市 字段
$row = dbArray($query);
$number = $row["num"];
if($number>1 && $address3<>'' && $nums<>0 && $address2<>广州 ){
unset($addresss[1]); // 如果数组数据2在数据库里有 多个 则删除数据2
}
@extract(dbQuery("select count(*) as num_0 from ".weather_station." where district like '$address1' "));//查询 市 字段
@extract(dbQuery("select count(*) as num_1 from ".weather_station." where station like '$address2' "));//查询 县 字段
$number = $num_0;
$numbery = $num_1;
if($number>1 && $numbery>0 && $address2<>''){
unset($addresss[0]); //如果数组数据1在数据库里有 多个 则删除数据1
}
$addresss = implode("",$addresss);
//字符串处理完毕 下面开始查询 station_id
$query1 = dbQuery("select count(*) as nums_addresss from ".weather_station." where station like '$addresss' ");
$row1 = dbArray($query1);
$nums_addresss = $row1["nums_addresss"];
$query2 = dbQuery("select count(*) as numd_addresss from ".weather_station." where district like '$addresss' ");
$row2 = dbArray($query2);
$numd_addresss = $row2["numd_addresss"];
if($nums_addresss>0){
$result = dbQuery("SELECT station_id FROM ".weather_station." WHERE station like '$addresss' ORDER BY id");
$r = dbArray($result);
$station_id[] = $r[station_id];
$station_id = $station_id[0];
return $station_id; // 查询结果
}
if($nums_addresss==0 && $numd_addresss>0){
$result = dbQuery("SELECT station_id FROM ".weather_station." WHERE district like '$addresss' ORDER BY id");
$r = dbArray($result);
$station_id[] = $r[station_id];
$station_id = $station_id[0];
return $station_id; // 查询结果
//echo $station_id;
}
}
function get_real_ip()
{
$ip=false;
if(!empty($_SERVER["HTTP_CLIENT_IP"]))
{
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip)
{
array_unshift($ips, $ip); $ip = FALSE;
}
for ($i = 0; $i < count($ips); $i++)
{
if (!eregi ("^(10|172.16|192.168).", $ips[$i]))
{
$ip = $ips[$i];
break;
}
}
}
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
function addr(){
include_once('./include/tq/config.inc.php');
include_once('./include/tq/error.inc.php');
include_once('./include/tq/mysql.inc.php');
include_once('./include/tq/template.inc.php');
unset($onlineip);
if($_SERVER['HTTP_CLIENT_IP']){
$onlineip=$_SERVER['HTTP_CLIENT_IP'];
}elseif($_SERVER['HTTP_X_FORWARDED_FOR']){
$onlineip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$onlineip=$_SERVER['REMOTE_ADDR'];
}
$ips = $onlineip;
$addr = convertip($ips);
$address = $addr;
$address = str_replace(array('省','市','县','工业','北京','区','大学','武汉','西安','安交','海交','新疆','大连','广西'),array(' ',' ',' ',' 工业','北京 ',' ',' ','武汉 ','西安 ','安 交','海 交','新疆 ','大连 ','广西 '),$address);
$addresss = explode(" ",$address);
$address1 = $addresss[0];
$address2 = $addresss[1];
$address3 = $addresss[2];
$address4 = $addresss[3];
$query = dbQuery("select count(*) as num from ".weather_station." where province like '$address1' ");//查询 省字段 数目
$row = dbArray($query);
$number = $row["num"];
if($number>0 && $address2<>'' && $address1<>上海 && $address1<>重庆){
unset($addresss[0]);
}
if($address4==''){
unset($addresss[3]);
}
if($address3==''){
unset($addresss[2]);
}
$query = dbQuery("select count(*) as num from ".weather_station." where station like '$address4' ");//查询 县 字段
$row = dbArray($query);
$number = $row["num"];
if($number==0){
unset($addresss[3]);
}
$query = dbQuery("select count(*) as num from ".weather_station." where station like '$address3' ");//查询 县 字段
$row = dbArray($query);
$number = $row["num"];
if($number==0){
unset($addresss[2]);
}
//数组数据2 查询开始
$queryx = dbQuery("select count(*) as nums from ".weather_station." where station like '$address2' ");//查询 县 字段
$row = dbArray($queryx);
$nums = $row["nums"];
$queryy = dbQuery("select count(*) as numd from ".weather_station." where district like '$address2' ");//查询 市 字段
$row = dbArray($queryy);
$numd = $row["numy"];
if($nums==0 && $numd==0){
unset($addresss[1]); // 如果 数组数据2 不在数据库里则删除数据2
}
//数组数据2 查询结束
$query = dbQuery("select count(*) as num from ".weather_station." where district like '$address2' ");//查询 市 字段
$row = dbArray($query);
$number = $row["num"];
if($number>1 && $address3<>'' && $nums<>0 && $address2<>广州 ){
unset($addresss[1]); // 如果数组数据2在数据库里有 多个 则删除数据2
}
@extract(dbQuery("select count(*) as num_0 from ".weather_station." where district like '$address1' "));//查询 市 字段
@extract(dbQuery("select count(*) as num_1 from ".weather_station." where station like '$address2' "));//查询 县 字段
$number = $num_0;
$numbery = $num_1;
if($number>1 && $numbery>0 && $address2<>''){
unset($addresss[0]); //如果数组数据1在数据库里有 多个 则删除数据1
}
$addresss = implode("",$addresss);
return $addresss; // 结果
}
?>
复制代码config.inc.php
<?php
// this file is mysql config
$dbhost = 'localhost';
$dbname = '********';
$dbuser = '********';
$dbpass = '******';
$prefix = '';
?>
php 分页类函数
function getPageBar($count = 0)
{
$bad_link_color = "#C0C0C0";
$page["url"] = eregi_replace("&page=[^&]+","",basename($_SERVER[SCRIPT_NAME])."?".$_SERVER[QUERY_STRING]);
$page["result_count"] = (string) $count;
$page["this_page"] = (empty($_GET["page"]))?"1":$_GET["page"];
$page["this_page"] = ($page["result_count"] == 0)?"0":$page["this_page"];
$page["page_size"] = $GLOBALS["option"]["page_size"];
$page["page_count"] = (string) ceil($page["result_count"]/$page["page_size"]);
$page["first_page"] = ($page["this_page"] > 1)?"<a href="".$page["url"]."&page=1" title="首页"><span style="font-size:12px; font-weight: bold; font-familly: Courier;">«</span></a>":"";
$page["rearward_page"] = ($page["this_page"] < (int) $page["page_count"])?"<a href="".$page["url"]."&page=".$page["page_count"]."" title="末页"><span style="font-size:12px; font-weight: bold; font-familly: Courier;">»</span></a>":"";
$page["prev_page"] = ($page["this_page"] > 1)?"<a href="".$page["url"]."&page=".((int)$page["this_page"] - 1)."" title="上一页"><span style="font-size:12px; font-weight: bold; font-familly: Courier;">‹</span></a>":"";
$page["next_page"] = ($page["this_page"] < (int) $page["page_count"])?"<a href="".$page["url"]."&page=".((int)$page["this_page"] + 1)."" title="下一页"><span style="font-size:12px; font-weight: bold; font-familly: Courier;">›</span></a>":"";
$page['start_page'] = ((int)$page["this_page"]-5<1)?1:(int)$page["this_page"]-5;
$page['end_page'] = ((int)$page["this_page"]+5 > $page['page_count'])?(int)$page["page_count"]:(int)$page["this_page"]+5;
for ($i = $page['start_page'];$i <= $page['end_page'];$i++)
{
$selected = ($_GET["page"] == $i)?"selected":"";
$page["page_select"] .= "<option value="$i" $selected>$i</option>";
$page["page_list"] .= ($i == $page["this_page"])?" <font color="red">$i</font> ":"<a href="".$page['url']."&page=$i" title="第 ".$i." 页">[$i]</a>";
}
return $page;
}
php实用实例 采集远程网站图片保存到本地
先从文章中把所有<img ...> 用正则 抠出来. $message //文章内容
//正则(这个还不是)
$reg = "/<img[^>]*src="(http://(.+)/(.+).(jpg|gif|bmp|bnp))"/isU";
//把抠出来的 img 地址存放到 $img_array 变量中
preg_match_all($reg, $message, $img_array, PREG_PATTERN_ORDER);
//过滤重复的图片
$img_array = array_unique($img_array[1]);
复制代码第二步. 把$img_array 数组循环一下. 做图片保存和文章位置替换 foreach ($img_array as $img){
//判断是否是自己网站上的 图片
if('xxx.com' != get_domain($img)){// 如果这个图片不是自己服务器上的
//读取图片文件
$Gimg = new GetImage();
$Gimg->source = $img;
$Gimg->save_to = './data/temp/';
$FILE = $Gimg->download(); //图片移动到本地
//保存到相册 得到图片保存的位置
$img_path = pic_save($FILE,0,'');
//文本路径替换
$message = str_replace($img, $img_path, $message);
}
}
....这时候 $message 里面已经图片已经替换为自己服务器本地的地址,并且图片也保存到自己的服务器上.
复制代码//下面一个函数 和 类是从网络上找的.
//从url中获得域名
function get_domain($url){
$pattern = "/[w-]+.(com|net|org|gov|cc|biz|info|cn)(.(cn|hk))*/";
preg_match($pattern, $url, $matches);
if(count($matches) > 0) {
return $matches[0];
}else{
$rs = parse_url($url);
$main_url = $rs["host"];
if(!strcmp(long2ip(sprintf("%u",ip2long($main_url))),$main_url)) {
return $main_url;
}else{
$arr = explode(".",$main_url);
$count=count($arr);
$endArr = array("com","net","org","3322");//com.cn net.cn 等情况
if (in_array($arr[$count-2],$endArr)){
$domain = $arr[$count-3].".".$arr[$count-2].".".$arr[$count-1];
}else{
$domain = $arr[$count-2].".".$arr[$count-1];
}
return $domain;
}// end if(!strcmp...)
}// end if(count...)
}// end function
// 从远程吧图片载到服务器本地 的 类
class GetImage {
var $source;
var $save_to;
var $quality;
function download($method = 'curl') {
$info = @GetImageSize($this->source);
$mime = $info['mime'];
// What sort of image?
$type = substr(strrchr($mime, '/'), 1);
switch ($type){
case 'jpeg':
$image_create_func = 'ImageCreateFromJPEG';
$image_save_func = 'ImageJPEG';
$new_image_ext = 'jpg';
// Best Quality: 100
$quality = isSet($this->quality) ? $this->quality : 100;
break;
case 'png':
$image_create_func = 'ImageCreateFromPNG';
$image_save_func = 'ImagePNG';
$new_image_ext = 'png';
// Compression Level: from 0 (no compression) to 9
$quality = isSet($this->quality) ? $this->quality : 0;
break;
case 'bmp':
$image_create_func = 'ImageCreateFromBMP';
$image_save_func = 'ImageBMP';
$new_image_ext = 'bmp';
break;
case 'gif':
$image_create_func = 'ImageCreateFromGIF';
$image_save_func = 'ImageGIF';
$new_image_ext = 'gif';
break;
case 'vnd.wap.wbmp':
$image_create_func = 'ImageCreateFromWBMP';
$image_save_func = 'ImageWBMP';
$new_image_ext = 'bmp';
break;
case 'xbm':
$image_create_func = 'ImageCreateFromXBM';
$image_save_func = 'ImageXBM';
$new_image_ext = 'xbm';
break;
default:
$image_create_func = 'ImageCreateFromJPEG';
$image_save_func = 'ImageJPEG';
$new_image_ext = 'jpg';
}
if(isSet($this->set_extension)){
$ext = strrchr($this->source, ".");
$strlen = strlen($ext);
$new_name = basename(substr($this->source, 0, -$strlen)).'.'.$new_image_ext;
}else{
$new_name = basename($this->source);
}
$save_to = $this->save_to."/blog_insert_temp_".time().mt_rand(1,99).".".$new_image_ext;
//输出对象 组成跟$_FILE变量一样 得到后自己和平常图片上传处理一样了
$img_info['name'] = basename($this->source);
$img_info['type'] = $mime;
$img_info['size'] = 1000;
$img_info['tmp_name'] = $save_to;
$img_info['error'] = 0;
if($method == 'curl'){
$save_image = $this->LoadImageCURL($save_to);
}elseif($method == 'gd'){
$img = $image_create_func($this->source);
if(isSet($quality)){
$save_image = $image_save_func($img, $save_to, $quality);
}else{
$save_image = $image_save_func($img, $save_to);
}
}
return $img_info;
}
function LoadImageCURL($save_to){
$ch = curl_init($this->source);
$fp = fopen($save_to, "wb");
// set URL and other appropriate options
$options = array(CURLOPT_FILE => $fp,
CURLOPT_HEADER => 0,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_TIMEOUT => 60); // 1 minute timeout (should be enough)
curl_setopt_array($ch, $options);
curl_exec($ch);
curl_close($ch);
fclose($fp);
}
}
php采集入门教程,教你如何写采集
我们第一步是采集所有的连接,我们这个可不是简单的采集一篇文章哦,我们要做的是采集整本书,并且保存到一个文本,因为现在MP3普及了,都可以看电子书了。
一本书要怎么保存呢,当然是要用书名保存便于查找拉,我们先来采集这本书的标题,
先来看一下原形:
<meta name="description" content="诛仙(二),后金庸武侠圣经:诛仙2">
规律是:
<meta name="description" content="标题">
我们来写一下正则表达式吧,不要告诉我不会,不会就来湖南拉,嘿嘿很多大鸟的。
正则表达式:
<meta name="description" content="(.*?)">
下面开始开工拉!我们首先要获得资源,这里需要用到一个函数:
file_get_contents()
介绍:
主要功能:将整个文件读入一个字符串
原形是:string file_get_contents
( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] )
具体什么意思呢,其实就是告诉你在某个资源内搜索符合规定的字符串并赋予给一个变量
上边是开始需要用到的,我们了解一点就开始写一点那样更能够深刻的理解并且能记住,我来分析下写程序的思路:
我们采集一个地址,不会是就采集一本书把所以我们的采集地址是变化的,变化的用什么呢?这个时候一个硕大的粉笔扔了过来,我不是告诉你了吗?变量,一个严厉的王建军老师,用尽了全身力气,汇集在粉笔上对我无情的扔了过来,我想哭。。。。。。。老师打人了!!!!!!!!打家来看啊。
用变量好的,那就用变量,我们获取地址,代码如下:
$url = "http://book.sina.com.cn/nzt/lit/zhuxian2/index.shtml";// 图书地址
有了上边讲的,现在应该可以完全写出来了,开始代码:
<?php
//****************************************************************
$url = "http://book.sina.com.cn/nzt/lit/zhuxian2/index.shtml";// 图书地址
$ver = "old"; //新旧版本
//因为图书他的页面又两种板式,所以我们要在这里区别一下
//****************************************************************
// 获取页面代码 file_get_contents() 把文件读入一个字符串,下边的时候需要用到
$r = file_get_contents($url);
//在上边获取的字符串中搜索标题,并赋值给变量$booktitle,$booktitle是数组,/is就凑活理解成开始吧!
preg_match("/<meta name="description" content="(.*?)">/is",$r,$booktitle);
//把第一个出现捕获的标题赋值给变量bookname。
$bookname = $booktitle[1]; //书名
//print_r ($booktitle);die();不理解的输出这个看看,嘿嘿,帮助大家理解
/*************************************************************************************
*原形:<li><a href=/nzt/lit/zhuxian2/1.shtml target=_blank class=a03>第四十五章 伤痛(1)</a>
*规律是:<li><a href=不固定.shtml target=_blank class=a03>不固定</a>
*ISU是正则的一种模式,该模式是非贪婪模式,也就是说只要匹配上就结束
*************************************************************************************/
$preg = '/<li><a href=(.*).shtml target=_blank class=a03>/isU';
/********************************************************************************
*preg_match_all进行全局正则表达式匹配
*原形:
*
int preg_match_all
*
( string pattern, string subject, array matches [, int flags] )
*意思是:在全局搜索资源变量$preg,得到一个数组赋值给一个变量$zj,这个变量也就是数组了。
*取得其中的资源的时候用标示就可以,不会的看下数组哦!
*汪老师说了,不会数组的给我出去啃书,什么时候会了进来
**********************************************************************************/
preg_match_all($preg, $r, $zj);
//print_r ($zj);die();不理解的输出这个看看,嘿嘿,帮助大家理解
// 计算标题数量,我是问了最后提示大家看又多少章节,采集了多少
$bookzj = count($zj[1]);
//判断你要采集的板式是那种哦,因为内容开始不一样哦,其实可以自动判断的,我也写成了,但是不发布,因为很简单
if ($ver=="new"){
$content_start = "<!--正文内容开始-->";
$content_end = "<!--正文内容结束-->";
}
if ($ver=="old"){
$content_start = "</table><!--NEWSZW_HZH_END-->";
$content_end = "<br>";
}
//采集后的文件,然后那来进行处理.这个是设置编码的,为什么是这个呢,因为你看下网站源码,嘿嘿!!!
header("Content-Type:text/html;charset=gb2312");
/*****************************************************************************************
*从1到136页的内容一次合并.这个是最爽的...打个版权,以免有人侵权,嘿嘿,好像我就在侵权哦!!!
*某某一定想杀人,这句意思就是写个版权,创建文件。
*****************************************************************************************/
writer($bookname." 共".$bookzj."节rn帅哥刘并于".date("D M j G:i:s T Y")."为了毕业而设计小说整理收集rn", "./ljy/".$bookname.".txt","w+");
/*****************************************************************************************
*从1到136页的内容一次合并.这个是最爽的...打个版权,以免有人侵权,嘿嘿,好像我就在侵权哦!!!
*某某一定想杀人,这句意思就是写个版权,创建文件。
*****************************************************************************************/
for ($i=0;$i<$bookzj;$i++) {//提示下:$bookzj里边是什么前边叫你输出了,不明自自己在看下
//echo "http://book.sina.com.cn".$zj[1][$i]".shtml";die();
$str = file_get_contents("http://book.sina.com.cn".$zj[1][$i].".shtml");
preg_match("/(<title>)(.*?)(</title>)/is",$str,$title);
$title = str_replace("_读书频道_新浪网","",preg_replace("/<(.*?)>/s","",$title[2]));
/***************************************************************************
*preg_replace执行正则表达式的搜索和替换
*str_replace用法真的不好说,就看例子吧!其实就是一个替换
* str = "abcabc".replace(/a/g, "d"); //结果为 dbcdbc
* str = "abcabc".replace(/a/, "d"); //结果为 dbcabc
***************************************************************************/
preg_match("/(".$content_start.")(.*?)(".$content_end.")/is",$str,$content);
$content = preg_replace("/<(.*?)>/s","",str_replace("</p>","rn",$content[2]));
$content = str_replace("
","",preg_replace("/^[s]*n/is","",$content));
$content = str_replace(" ? "," ",preg_replace("/^[s]*n/is","",$content));
$result = " rn第".($i+1)."节--------".$title."_汪老师就是帅 --------- rn".$content;
//var_dump ($result);die();
writer($result, "./ailaopo/".$bookname.".txt","a+");
echo "小说".$bookname."共".$bookzj."节,现在整理到第".$i."节 _".$title."<br>";
}
echo "小说".$bookname."共".$bookzj."节 已全部整理完成!";
function writer($content,$url,$mode)
{
$fp = fopen($url, $mode);
fwrite($fp, $content);
fclose($fp);
}
?>
php实用图片水印效果代码
<?php
define('Water',1);//水印方式(0,文字水印,1图片水印)
define('WaterImg','./water.jpg');//水印图片地址
define('WaterNum',0);//水印位置,0为随机,1-9分别为顶左顶中顶右中左中中中右底左底中底右
define('WaterX',81);//水印长
define('WaterY',81);//水印高
define('WaterType','image/jpeg');//水印图片类型
define('WaterText','爱搜罗');//水印文字(必须先转换成UTF-8才能实现中文水印)
define('WaterTextColor','#000000');//水印文字颜色
define('WaterTextSize',50);//水印文字大小 px
define('WaterTextFont','C:WINDOWSFontsSIMFANG.TTF');//水印文字字体 (仿宋)
define('WaterPtc',50);//水印透明度
//////////////////////水印默认设置完毕
class water
{
private $img;//图片地址
private $img_type;//图片类型
//private $img_mime;//图片实际类型
private $img_x;//图片长
private $img_y;//图片高
private $is_water;//是否可以添加水印,布尔
private $water_img;//水印图片
private $water_text;//图片文字(UTF-8)
private $water_num;//水印位置(可能用不着)
private $water_w = WaterX;//water的宽
private $water_h = WaterY ;//water的长
private $water_x;//水印的x位置
private $water_y;//水印的y位置
private $src_x;//画布与water两图的长度差
private $src_y;//画布与water两图的高度差
private $err_msg;//图片地址
public function __construct($img,$img_type)
{
if (file_exists($img) == FALSE)
{
$this->Err_Img('No_Img');
}
$this->img = $img;
$this->img_type = $img_type;//写入图片类型
$this->Check_GD();//检查GD库
$this->Do_Water();//判断水印方式
$this->Type_Img();//判断图片类型
}
/*
* 检查GD库
*/
public function Check_GD(){
if (function_exists("gd_info") == FALSE)
{
$this->Err_Img('No_Gd');
}
}
/*
* 处理水印方式及water文件类型
*/
public function Do_Water()
{
if (Water == 1)//图片水印
{
$this->Img_Water();//处理water图片
}else{//文字水印
$this->Text_xy();//处理文字水印图片
}
}
/*
* 处理water图片
*/
public function Img_Water()
{
if (file_exists(WaterImg) == FALSE)
{
$this->Err_Img('No_WaterImg');
//使用文字水印
}
switch (WaterType)
{
case 'image/jpeg':
$this->water_img = imagecreatefromjpeg(WaterImg);
break;
}
}
/*
* 获得文字的长宽 并 计算 两图的长宽差
*/
public function Text_xy()
{
$str = iconv('GB2312','UTF-8',WaterText);
$temp = imagettfbbox(50,0,WaterTextFont,$str);//取得使用 TrueType 字体的文本的范围
$w = $temp[2] - $temp[6];
$h = $temp[3] - $temp[7];
$this->src_x = $this->img_x - $w;
$this->src_y = $this->img_y - $h;
}
/*
* 判断图片是否能够添加水印,比较大小
*/
public function Is_Water()
{
if (Water == 1)//图片水印
{
$this->src_x = $this->img_x - WaterX;
$this->src_y = $this->img_y - WaterY;
if ($this->src_x <= 0 && $this->src_y <= 0)
{
$this->Err_Img('Too_Small');
}
}else{//文字水印
if ($this->src_x <= 0 && $this->src_y <=0)
{
$this->Err_Img('Too_Small');
}
}
}
/*
* 处理水印位置
* 得到 水印位置的坐标
*/
public function Water_Num()
{
switch(WaterNum)
{
case 0://随机
$this->water_x = rand(0,($this->img_x - $this->water_w));
$this->water_y = rand(0,($this->img_y - $this->water_h));
break;
case 1://顶端居左
$this->water_x = 0;
$this->water_y = 0;
break;
case 2://顶端居中
$this->water_x = ($this->img_x - $this->water_w)/2;
$this->water_y = 0;
break;
case 3://顶端居右
$this->water_x = $this->img_x - $this->water_w;
$this->water_y = 0;
break;
case 4://中间居左
$this->water_x = 0;
$this->water_y = ($this->img_y - $this->water_h)/2;
break;
case 5://中间居中
$this->water_x = ($this->img_x - $this->water_w)/2;
$this->water_y = ($this->img_y - $this->water_h)/2;
break;
case 6://中间居右
$this->water_x = $this->img_x - $this->water_w;
$this->water_y = ($this->img_y - $this->water_h)/2;
break;
case 7://底部居左
$this->water_x = 0;
$this->water_y = $this->img_y - $this->water_h;
break;
case 8://底部居中
$this->water_x = ($this->img_x - $this->water_w)/2;
$this->water_y = $this->img_y - $this->water_h;
break;
case 9://底部居右
$this->water_x = $this->img_x - $this->water_w;
$this->water_y = $this->img_y - $this->water_h;
break;
default://随机
$this->water_x = rand(0,($this->img_x - $this->water_w));
$this->water_y = rand(0,($this->img_y - $this->water_h));
}
}
/*
* 判断图片类型
*/
public function Type_Img()
{
switch ($this->img_type)
{
case 'image/jpeg':
header("Content-type: image/jpeg");
$this->img = imagecreatefromjpeg($this->img);
break;
}
$this->Img_Water();//处理water图片
$this->img_x = imagesx($this->img);
$this->img_y = imagesy($this->img);
$this->Water_Num();//判断水印位置
$this->Is_Water();
$this->Make_img();
}
/*
* 制作图片水印
*/
public function Make_img(){
imagecopymerge($this->img,$this->water_img,$this->water_x,$this->water_y,0,0,WaterX,WaterY,WaterPtc);
imagejpeg($this->img);
}
/*
* 制作文字水印
*/
public function Make_Text()
{
echo '测试';
}
/*
* 返回错误信息
*/
public function Err_Img($msg)
{
switch($msg)
{
case 'No_Gd':
$this->err_msg = '没有安装GD库';
break;
case 'No_Img':
$this->err_msg = '图片不存在';
break;
case 'No_WaterImg':
$this->err_msg = 'water图片不存在';
break;
case 'Too_Small':
$this->err_msg = '图片过小';
break;
}
die($this->err_msg);//输出错误信息
}
public function __destruct()
{
imagedestroy($this->img);
imagedestroy($this->img_water);
}
}
$img = new water('./100.jpg','image/jpeg');//实例化
?>
相关文章
- c#获取本机的IP地址的代码,需要的朋友可以参考一下...2020-06-25
- 这篇文章主要为大家详细介绍了微信小程序实现选择地址省市区三级联动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-21
- 这篇文章主要介绍了C#实现获取MAC地址的方法,很实用的功能,需要的朋友可以参考下...2020-06-25
Microsoft Expression Web 简体中文正式版 官方下载地址
Microsoft Expression Web 简体中文正式版相对于早期的 Microsoft Expression Web Designer CTP1(英文)除了它是正式的中文版外,有进步的地方1.对标签的id名称加上了css的代...2020-06-25- 这篇文章主要为大家详细介绍了C++ opencv实现车道线识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-20
- 这篇文章主要为大家详细介绍了Opencv LBPH人脸识别算法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- 这篇文章主要介绍了python 实现性别识别的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...2020-11-22
- PHP IP地址格式检测函数复制代码 代码如下:function checkIp($ip){ $ip = str_replace(" ", "", $ip); $ip = strtolower($ip); $ip= str_replace("http://", "", $ip); $ip= str_replace("https://", ""...2013-10-04
- 这篇文章主要介绍了C#获取路由器外网IP,MAC地址的实现代码,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了php判断邮箱地址是否存在的方法,php判断邮箱地址是否存在的方法有两种,感兴趣的朋友可以参考一下...2016-02-18
- 这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下...2020-06-25
解决使用了nginx获取IP地址都是127.0.0.1 的问题
这篇文章主要介绍了解决使用了nginx获取IP地址都是127.0.0.1 的问题,获取i工具的完整代码文中给大家提到,具体实例代码跟随小编一起看看吧...2021-09-18- 这篇文章介绍了php获取当前url地址的方法小结,有兴趣的同学可以参考一下 本文实例讲述了php获取当前url地址的方法。分享给大家供大家参考,具体如下: js 获取: ...2017-01-22
整理的7款常用的开源免费的Android UI组件及官方下载地址
Android开发技术日趋成熟,开源社区也涌现了很多开源UI项目,以下是笔者整理的7款Android开发者常用的Android UI组件及官方下载地址。 Android开发是目前最热门的移...2016-09-20- 一篇php中匹配邮箱地址正则表达式实例,邮箱地址替换正则我常用的正则匹配表达式:/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\\.][a-z]{2,3}([\\....2016-11-25
- 这篇文章主要介绍了python 实现表情识别的示例代码,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下...2020-11-22
- 这篇文章主要介绍了C#实现的简单验证码识别实例,只适应一些简单的验证码,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了C# windows语音识别与朗读实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-26
- 一个段经典的代码可以用来获取用户的真实IP地址,包括可以是内网或是外网,有需要的朋友可以参考一下。 代码如下 复制代码 /** * 获得用户的...2016-11-25
- 获取当前页面的url地址php代码,第一款是一款获取无参数URL第二款是获取完整URL函数哦,如果你正找url参数的代码哦。 代码如下 复制代码 <?php...2016-11-25