此笔记主要记录PHP中常用到的一些代码片段
锚点
分页功能
效果图
PHP
/**
* 分页
* @param $page_count 总页数
* @param $show_number 显示多少页
* @return string
*/
function paging($page_count,$show_number){
$getAttr=$_GET;
$currentPage=!empty($getAttr['page']) ? $getAttr['page'] : 1;
$href='//'.$_SERVER['SERVER_NAME'].$_SERVER["PATH_INFO"];
$pageStr='';
//上一页
if($currentPage>1){
$getAttr['page']=$currentPage-1;
$url=$href."?".http_build_query($getAttr);
$pageStr='<a href="'.$url.'" class="page-prev">上一页</a>';
}else{
$pageStr.='<a href="javascript:;" class="page-prev paging-disabled">上一页</a>';
}
//当前页数的前后
$leftPage_num=floor($show_number/2);
$rightPage_num=$show_number-$leftPage_num;
$left=max($currentPage-$leftPage_num,1);
$right=min($left+$show_number-1,$page_count);
$left=max($right-$show_number+1,1);
//省略部分和显示最小页数(首页)
if($left>1){
$_GET['page']=1;
$url=$href."?".http_build_query($_GET);
$pageStr.='<a href="'.$url.'" class="page-next">'.$_GET['page'].'</a>';
//特殊条件 如 上一页1...234下一页 就去掉省略号直接显示 上一页1234下一页
if(($left-1)!=1){
$pageStr.='<span class="spr">…</span>';
}
}
//显示页码
for($i=$left;$i<$right+1;$i++){
$_GET['page']=$i;
if($currentPage==$i){
$pageStr.='<span class="paging-current">'.$i.'<em>'.$i.'</em></span>';
}else{
$url=$href."?".http_build_query($_GET);
$pageStr.='<a href="'.$url.'" class="">'.$i.'</a>';
}
}
//省略部分和最大页数(末页)
if($right<$page_count){
$_GET['page']=$page_count;
$url=$href."?".http_build_query($_GET);
//特殊条件 如 上一页123...4下一页 就去掉省略号直接显示
if(($right+1)!=$page_count){
$pageStr.='<span class="spr">…</span>';
}
$pageStr.='<a href="'.$url.'" class="page-next">'.$_GET['page'].'</a>';
}
//下一页
if($currentPage!=$page_count){
$getAttr['page']=$currentPage+1;
$url=$href."?".http_build_query($getAttr);
$pageStr.='<a href="'.$url.'" class="page-next">下一页</a>';
}else{
$pageStr.='<a href="javascript:;" class="page-next paging-disabled">下一页</a>';
}
$pageStr='<div class="pagingCtn">'.$pageStr.'</div>';
return $pageStr;
}
css
.pagingCtn {
display: inline-block;
vertical-align: middle;
margin: 10px 0;
font-size: 0;
}
.pagingCtn>a:first-child, .pagingCtn>a:first-child em {
border-radius: 2px 0 0 2px;
}
.pagingCtn a, .pagingCtn span {
display: inline-block;
vertical-align: middle;
padding: 0 15px;
height: 28px;
line-height: 28px;
margin: 0 -1px 5px 0;
background-color: #fff;
color: #333;
font-size: 12px;
}
.pagingCtn a {
text-decoration: none;
}
.pagingCtn a:hover {
color: #009688;
}
.pagingCtn a,.pagingCtn span {
text-align: center;
border: 1px solid #e2e2e2;
}
.pagingCtn>.paging-current{
position: relative;
}
.pagingCtn>.paging-current em {
position: absolute;
left: -1px;
top: -1px;
padding: 1px;
width: 100%;
height: 100%;
background-color: #009688;
color: #FFF;
font-style: normal;
border-radius: 2px;
box-sizing: content-box;
z-index: 1;
}
.paging-disabled,.paging-disabled:hover {
color: #d2d2d2!important;
cursor: not-allowed!important;
}
IP获取
PHP
/**
* 获取客户端IP地址
* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
* @param boolean $adv 是否进行高级模式获取(有可能被伪装)
* @return mixed
*/
function ip($type = 0, $adv = false)
{
$type = $type ? 1 : 0;
static $ip = null;
if (null !== $ip) {
return $ip[$type];
}
if ($adv) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$pos = array_search('unknown', $arr);
if (false !== $pos) {
unset($arr[$pos]);
}
$ip = trim(current($arr));
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
// IP地址合法验证
$long = sprintf("%u", ip2long($ip));
$ip = $long ? [$ip, $long] : ['0.0.0.0', 0];
return $ip[$type];
}