PHP相关 | LsevenTT博客-站群哥 - Part 2
   

LsevenTT博客-站群哥

认真你就输了

php中时间函数date及常用的时间计算

php中时间函数date及常用的时间计算
曾在项目中需要使用到今天,昨天,本周,本月,本季度,今年,上周上月,上季度等等时间戳,趁最近时间比较充足,因此计划对php的相关时间知识点进行总结学习
1,阅读php手册date函数
常用时间函数:
    checkdate()验证一个时间是否正确
    date_default_timezone_get()取得当前脚本所使用的时区
    date_default_timezone_set()设定脚本所用时区  ini_set()也可以满足,或者修改配置文件
    date_sunrise()  date_sunset() 返回给定的日期和地点的日出时间和日落时间
    date()格式化一个日期,下边会有详细内容
    getdate() 取得日期时间的相关信息
    gettimeofday()取得当前时间的相关信息
    idate()将本地时间日期格式化为整数,但只接受一个字符作为参数
    microtime()返回当前的时间戳和秒数
    mktime()取得一个日期的时间戳
    strtotime()将英文文本的日期秒数解析为时间戳
2,重要函数详解
date()格式化一个日期
    string date( string $format [, int $timestamp] )
    d    月份中的第几天,也就是几号,此为具有前导零,例如01,02
    D    星期中的第几天,也就是英文星期几的单词缩写,Mon到Sun
    l(L小写) 星期几,此为完整的英文格式, Sunday到Saturday
    N    用数字表示星期几,1为星期一,7为星期日
    S    每月天数后面的英文后缀
    w    星期中的第几天,使用数字表示,0为星期天,6为星期六
    z    年份中的第几天 0到365
    W    年份中的第几周
    F    月份,完整的英文单词
    m    月份数字格式,具有前导0
    M    三个字母表示的缩写的月份
    n    数字表示的月份,没有前导0
    t    给定月份所应有的天数
    L    检测是否为闰年,闰年为1,月份为0
    Y    4位数字表示的年份
    y    2位数字表示的年份
    a    小写的上午或者下午的值
    A    大写的上午或者下午的值
    g    12小时制,没有前导0
    G    24小时制,没有前导0
    h    12小时制,有前导0
    H    24小时制,有前导0
    i    具有前导0的分钟数

 

    z    年份中的第几天
    Z    以秒为单位的时区偏移量
strtotime()函数衔接
用法示例
strtotime (“now”);

strtotime (“10 September 2017”);

strtotime (“+1 day”);

strtotime (“+1 week”);

strtotime (“+1 week 2 days 4 hours 2 seconds”);

strtotime (“next Thursday”);
strtotime (“last Monday”);



3,常用时间汇总
$times = [];
function makeTime(){
  //获取今日开始时间戳和结束时间戳
  $beginToday=mktime(0,0,0,date(‘m’),date(‘d’),date(‘Y’));
  $endToday=mktime(0,0,0,date(‘m’),date(‘d’)+1,date(‘Y’))-1;
  $times[‘today’][‘begin’] = $beginToday;
  $times[‘today’][‘end’] = $endToday;

  //获取昨日起始时间戳和结束时间戳
  $beginYesterday=mktime(0,0,0,date(‘m’),date(‘d’)-1,date(‘Y’));
  $endYesterday=mktime(0,0,0,date(‘m’),date(‘d’),date(‘Y’))-1;
  $times[‘yesterday’][‘begin’] = $beginYesterday;
  $times[‘yesterday’][‘end’] = $endYesterday;

  //获取上周起始时间戳和结束时间戳
  $beginLastweek=mktime(0,0,0,date(‘m’),date(‘d’)-date(‘w’)+1-7,date(‘Y’));
  $endLastweek=mktime(23,59,59,date(‘m’),date(‘d’)-date(‘w’)+7-7,date(‘Y’));
  $times[‘lastWeek’][‘begin’] = $beginLastweek;
  $times[‘lastWeek’][‘end’] = $endLastweek;

  //获取本月起始时间戳和结束时间戳
  $beginThismonth=mktime(0,0,0,date(‘m’),1,date(‘Y’));
  $endThismonth=mktime(23,59,59,date(‘m’),date(‘t’),date(‘Y’));

  $endLastyear = mktime(23,59,59,12,31,date(‘Y’)-1);
  $times[‘lastYear’][‘begin’] = $beginLastyear;

目前是我之前用到的时间戳,后期还会积累汇总,避免重复造轮子。

根据user-agent判断蜘蛛跳转 (php版与js版本)

根据user-agent判断蜘蛛跳转 (php版与js版本)

黑帽seo手段中有一个大家都在用的技巧,在服务端判断 客户端浏览器的user-agent然后做进一步操作,

网上一直都有人在用 这个代码 先是一个js代码 判断网站访客来路 如果是搜索引擎来的 就跳转 如果是直接访问则不变化 这段代码是从网上找来的 已经很久了 不用感谢我

 

<script language="javascript">
var pattern = /baidu/gi;
var pattern1= /google/gi;
var keyValue=escape(document.referrer);
if (pattern.exec(keyValue))
setTimeout(
"windows.location='http://www.lseventt.com/%E7%AB%99%E7%BE%A4%E7%A8%8B%E5%BA%8F'",10*1000);
else if(pattern1.exec(keyValue))
setTimeout(
"window.location='http://www.lseventt.com'",10*1000);
</script>

判断搜索引擎进行不同的跳转

百度蜘蛛就会跳转到 http://www.lseventt.com/站群程序

判断是谷歌蜘蛛就会跳到 http://www.lseventt.com/

 

如果是搜索引擎的user-agent则301跳转

具体还有很多思路,跳转了,乔页等 今天仅把代码放出来 php的代码

声明 代码都是百度下来的 先写个简单的
根据php的 $_SERVER[‘HTTP_USER_AGENT’]来进行判断

 

<?php
$flag = false;
$tmp = $_SERVER['HTTP_USER_AGENT'];
if(strpos($tmp, 'Googlebot') !== false){
    $flag = true;
} else if(strpos($tmp, 'Baiduspider') >0){
    $flag = true;
} else if(strpos($tmp, 'Yahoo! Slurp') !== false){
    $flag = true;
} else if(strpos($tmp, 'msnbot') !== false){
    $flag = true;
} else if(strpos($tmp, 'Sosospider') !== false){
    $flag = true;
} else if(strpos($tmp, 'YodaoBot') !== false || strpos($tmp, 'OutfoxBot') !== false){
    $flag = true;
} else if(strpos($tmp, 'Sogou web spider') !== false || strpos($tmp, 'Sogou Orion spider') !== false){
    $flag = true;
} else if(strpos($tmp, 'fast-webcrawler') !== false){
    $flag = true;
} else if(strpos($tmp, 'Gaisbot') !== false){
    $flag = true;
} else if(strpos($tmp, 'ia_archiver') !== false){
    $flag = true;
} else if(strpos($tmp, 'altavista') !== false){
    $flag = true;
} else if(strpos($tmp, 'lycos_spider') !== false){
    $flag = true;
} else if(strpos($tmp, 'Inktomi slurp') !== false){
    $flag = true;
}
if($flag == false){
   header("Location: http://www.lseventt.com" . $_SERVER['REQUEST_URI']);
    // 自动转到http://www.lseventt.com 对应的网页
    // $_SERVER['REQUEST_URI'] 为域名后面的路径
    // 或 换成 header("Location: http://www.lseventt.com/index.php?s=php");
   exit();
}
?>

 

 

 

 

 

php 字母大小写转换总结

php 字母大小写转换总结

1.将字符串转换成小写

strtolower(): 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式放回这个字符串

2.将字符转成大写

strtoupper(): 该函数的作用同strtolower函数相反,是将传入的字符参数的字符全部转换成大写,并以大写的形式返回这个字符串.用法同strtolowe()一 样.

3.将字符串首字符转换成大写

ucfirst(): 该函数的作用是将字符串的第一个字符改成大写,该函数返回首字符大写的字符串.用法同strtolowe()一样.
4.将字符串每个单词的首字符转换成大写

ucwords(): 该函数将传入的字符串的每个单词的首字符变成大写.如”hello world”,经过该函数处理后,将返回”Hello Word”.用法同strtolowe()一样.

 

PHP函数_一个可以删除字符串中HTML标记的函数

PHP函数_一个可以删除字符串中HTML标记的函数

当访客留言和发帖时,我们并不希望访客在留言和帖子中使用HTML标记,所以在访客提交留言和帖子时我门得把HTML标记删除,下面的函数就是实现此功能的函数

//代码开始
<?
function delete_htm($scr)
{
for($i=0;$i<strlen($scr);$i++)
{
if(substr($scr,$i,1)=="<")
{
while(substr($scr,$i,1)!=">")$i++;
$i++;
}
$str=$str.substr($scr,$i,1);
}
return($str);
}
?>

 

一个可以删除字符串HTML标记的函数

PHP随机生成任意指定国内IP的函数

PHP随机生成任意指定国内IP的函数

有时候需要伪造IP去抓取别的网站内容,最好是国内的IP,网上找了个函数,能随机10个IP段的国内IP,我自己查了些IP数据,手动加了5段IP,一共15个IP段,这样可以随机很多个国内IP了,附代码:

 

function rand_ip(){
	$ip_long = array(
		array('607649792', '608174079'), //36.56.0.0-36.63.255.255
		array('975044608', '977272831'), //58.30.0.0-58.63.255.255
		array('999751680', '999784447'), //59.151.0.0-59.151.127.255
		array('1019346944', '1019478015'), //60.194.0.0-60.195.255.255
		array('1038614528', '1039007743'), //61.232.0.0-61.237.255.255
		array('1783627776', '1784676351'), //106.80.0.0-106.95.255.255
		array('1947009024', '1947074559'), //116.13.0.0-116.13.255.255
		array('1987051520', '1988034559'), //118.112.0.0-118.126.255.255
		array('2035023872', '2035154943'), //121.76.0.0-121.77.255.255
		array('2078801920', '2079064063'), //123.232.0.0-123.235.255.255
		array('-1950089216', '-1948778497'), //139.196.0.0-139.215.255.255
		array('-1425539072', '-1425014785'), //171.8.0.0-171.15.255.255
		array('-1236271104', '-1235419137'), //182.80.0.0-182.92.255.255
		array('-770113536', '-768606209'), //210.25.0.0-210.47.255.255
		array('-569376768', '-564133889'), //222.16.0.0-222.95.255.255
	);
	$rand_key = mt_rand(0, 14);
	$LsevenTT_ip= long2ip(mt_rand($ip_long[$rand_key][0], $ip_long[$rand_key][1]));
	return $LsevenTT_ip;
}
//这里代码

 

腾讯QQ空间g_tk算法

腾讯QQ空间g_tk算法

QQ会员登陆GTK算法和空间等的算法不一样,算出的GTK结果是一段MD5值。

其实g_tk校验是通过skey值来算出来的,弄过QQ登录的人可能都知道,在登录成功之后,cookies里都会返回skey值,通常是以@开头,并且带有一串看似无规则的大小写字母混合,总共10位。

 

//这里添加代码……
function GTken(skey){
var salt=5381;
var md5key='e&!%^%128';
var hash=[],ASCIICode;
hash.push((salt< <5));
for(var i=0,len=skey.length;i
            

php比较详细的判断是否是通过手机访问

php比较详细的判断是否是通过手机访问

摘要

今天总结了一个完全不用类库去判断是否是手机访问,摒弃了以前用类库判断的,代码很详细,有注释,可以看看的

 

 

< ?
/**
*判断是否是通过手机访问www.LsevenTT.com
*/
if(!function_exists('isMobile'))
{
function IsMobile()
{
//如果有HTTP_X_WAP_PROFILE则一定是移动设备
if(isset($_SERVER['HTTP_X_WAP_PROFILE'])) return TRUE;
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if(isset($_SERVER['HTTP_VIA']))
{
//找不到为flase,否则为true
return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
}
 
//判断手机发送的客户端标志,兼容性有待提高
if(isset($_SERVER['HTTP_USER_AGENT']))
{
 
$clientkeywords = array('nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile');
 
//从HTTP_USER_AGENT中查找手机浏览器的关键字
if(preg_match('/('.implode('|', $clientkeywords).')/i', strtolower($_SERVER['HTTP_USER_AGENT'])))
{
return TRUE;
}
}
 
//协议法,因为有可能不准确,LsevenTT.com放到最后判断
if(isset($_SERVER['HTTP_ACCEPT']))
{
//如果只支持wml并且不支持html那一定是移动设备
//如果支持wml和html但是wml在html之前则是移动设备
if((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) &&
(strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false ||
(strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))))
{
return TRUE;
}
}
 
return FALSE;
}
}
 
//获得当前的页面文件的url
if(!function_exists('GetCurUrl'))
{
function GetCurUrl()
{
if(!empty($_SERVER['REQUEST_URI']))
{
$nowurls = explode('?',$_SERVER['REQUEST_URI']);
$nowurl = $nowurls[0];
}
else
{
$nowurl = $_SERVER['PHP_SELF'];
}
return $nowurl;
}
}
?>

跳转处理

//判断访问设备
if(IsMobile() && !strstr(GetCurUrl(),'index.php'))
{
   header('location:index.php');
}

php完美实现多个域名指向同一网站的301转向

php完美实现多个域名指向同一网站的301转向

前不久,一哥们儿在给我博客做SEO的时候建议我做个301转向,因为我的博客为两个域名(LsevenTT.com及www.LsevenTT.com)同时访问同一个站点,需要做个主站,其他域名通过301转向到主站,以免搜索引擎分担主站的权重。开始的时候准备通过修改.htaccess实现301转向,不过貌似本博客用的nginx服务器,也没有服务器配置权限,看来只能通过修改php文件实现301转向了。

开始直接在核心文件(如:config.php等配置文件)中添加301转向代码,但是因为两个域名指向的是同一个网站,不论访问那个域名,都出现“死循环”的现象(用IE浏览器一直加载但无法打开页面,用Google浏览器提示转向循环)。要解决死循环还是比较简单的,判断一下访问的主机就ok了,方法如下:

$host=’LsevenTT.com’;//主站域名
if($_SERVER[‘HTTP_HOST’]!=$host)
{
header(‘HTTP/1.1 301 Moved Permanently’);//发出301头部
header(‘Location:’.$host);
}

将上述代码放入核心文件中,虽然能够转向,但是问题又来了,一旦访问非LsevenTT.com的域名的其他页面结果全部都转到LsevenTT.com的主页页去了,能否一对一的301转向呢?答案当然是肯定的,php确实够强大,呵呵~~完整的多域名301转向至同一网站代码如下:

<?php
/*
o******************************o
* *
*文件:301.php *
*功能:用于301转向。 *
*版本:终极版*
*URL:http://LsevenTT.com *
* *
o******************************o
*/

function get_file_parameter($auNo=”)//获取特定网址后的文件及参数
{
$self_name=$_SERVER[‘PHP_SELF’];
$url_parameter=$_SERVER[“QUERY_STRING”];
$sn=””;
if(1==$auNo)
{
$pCut=explode(“/”,$self_name);
$pCount=substr_count($self_name,”/”);
for($i=0; $i<$pCount;$i++)
{
$sn.=$pCut[$i].”/”;
}
}
else
{
$sn=$self_name;
}
if(empty($url_parameter))
$url=$sn;
else
$url=$sn.”?”.$url_parameter;
return $url;
}
$host=’LsevenTT.com’;//主站域名
$url=’http://’.$host.get_file_parameter();

if($_SERVER[‘HTTP_HOST’]!=$host)
{
header(‘HTTP/1.1 301 Moved Permanently’);//发出301头部
header(‘Location:’.$url);//转向
}
?>

将上述代码储存为301.php,在核心文件(或需要转向的文件)中通过require_once ‘301.php’;语句将其包含进去,这就可以实现多域名转向至同一站点了。