欢迎光临
我们一直在努力

PHP分页代码函数

业余程序猿阅读(64)

最近在做一个WordPress自动翻译的web应用,在文件列表和词条列表页面需要进行分页显示,于是自己写了一个分页的函数。

function _show_page($pagesize,$pageall){
    if ($pageall<1) {
        $pageall = 1;
    }
    $paged          =   ceil($pageall / $pagesize);
    $paged_show     =   (int)($paged+1);
    $active_page    =   isset($_GET['page'])?$_GET['page']:'1';
    $url_str        =   preg_replace('/&page=[1-9]/','',$_SERVER["QUERY_STRING"]);
    $pre_no         =   $active_page-1;
    $next_no        =   $active_page+1;
    if ($paged == 1) {
        $pre    =   '<li class="page-item disabled"><a class="page-link" href="#" aria-disabled="true">上页</a></li>';
        $next   =   '<li class="page-item disabled"><a class="page-link" href="#" aria-disabled="true">下页</a></li>';
    }else{       
        
        if ($active_page == 1) {
            $pre    = '<li class="page-item disabled"><a class="page-link" href="#" aria-disabled="true">上页</a></li>';
            $next   = '<li class="page-item"><a class="page-link" href="?'.$url_str.'&page='.$next_no.'">下页</a></li>';
        }else if($active_page == $paged){
            $pre    = '<li class="page-item"><a class="page-link" href="?'.$url_str.'&page='.$pre_no.'">上页</a></li>';
            $next   = '<li class="page-item disabled"><a class="page-link" href="#">下页</a></li>';
        }else{
            $pre    = '<li class="page-item"><a class="page-link" href="?'.$url_str.'&page='.$pre_no.'">上页</a></li>';
            $next   = '<li class="page-item"><a class="page-link" href="?'.$url_str.'&page='.$next_no.'">下页</a></li>';
        }
        
    }
    echo '<div class="container py-3 ">
    <nav aria-label="..." class="d-flex justify-content-center">
      <ul class="pagination shadow">'.$pre;
    
    if ($paged >= 10) {
        for ($i=$active_page; $i < $paged_show; $i++) { 
            echo '<li class="page-item '._check_active($i,$active_page).'"><a class="page-link" href="?'.$url_str.'&page='.$i.'">'.$i.'</a></li>';
        }
    }
    
    echo $next.'
      </ul>
    </nav>
  </div>';
//   return $res;
}

这个函数在使用过程中,当页数少的时候可以正常显示,当页数多的时候整个页面底部就全是分页的代码。于是网上重新找了一个,稍作修改后正常了。

/**
 * 返回分页链接字符串
 * @param int $total 记录总数
 * @param int $pagesize 每页显示的记录数
 * @param string $url   分页链接url样式,默认直接使用GET['page']传递
 *        但针对一些特殊情况,如ajax分页,静态页分页,可能不能使用GET传递页码,需要定义url样式
 *        其中必须包含{page}字符串,将被替换为对应的页码 如
 *        $url = 'list_{page}.html';
 *        $url = 'javascript:funct(a,b,{page})';
 * @return string 分页链接HTML代码
 */ 
function _show_page($pagesize=0,$total=0,$url='') {
    $number=10;                                         # 每页显示的分页链接数量
    $page = isset($_GET['page'])?$_GET['page']:'1';     # 当前页码 0或1均视为第一页
    $total = intval($total);
    $pagesize = max(intval($pagesize),0);
    $pages = ceil($total/$pagesize);
            
    if($pages < 2) return ;        
    
    if(!$url) {
        $url = $_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'];
        $url = preg_replace('/\&*page=\d*\b/','',$url);
        $url .= empty($_SERVER['QUERY_STRING']) ? "page={page}" : "&page={page}";
    }        
    
    $output = '<div class="container py-3 ">
            <nav aria-label="..." class="d-flex justify-content-center">
                 <ul class="pagination shadow">';
    if($page > 1) {
        $output .= '<a title="第一页" class="page-link first_page" href="'.str_replace('{page}',1,$url).'">&lt;&lt;</a>';
        $output .= '<a title="上一页" class="page-link prev_page" href="'.str_replace('{page}',($page-1),$url).'"> &lt; </a>';
    }else {
        $output .= '<a title="第一页" class="page-link first_page"> &lt;&lt; </a>';
        $output .= '<a title="上一页" class="page-link prev_page"> &lt; </a>';
    }
    
    if($number%2) {
        $start = max($page -ceil($number/2)+1,1);
    }else {
        $start = max($page- intval($number/2),1);
    }
    
    
    $end = min($start+$number-1,$pages);
    
    if(($end - $start) < ($number-1)) {
        $start = max($end -$number+1, 1);
    }
    
    
    for($i = $start; $i <= $end; $i++) {
        $sel = $page == $i ? 'class="page-item active"' : 'class="page-item"';
        $link = str_replace('{page}',$i,$url);
        $href = $page == $i ? '' : 'href="'.$link.'"';            
        $output .= '<li '.$sel.'><a class="page-link" '.$href.'>'.$i.' </a></li>';
    }
    
    if($page < $pages) {
        $link = str_replace('{page}',$page+1,$url);
        $output .= '<li class="page-item"><a class="page-link next_page" href="'.$link.'" title="下一页"> &gt; </a></li>';
        $link = str_replace('{page}',$pages,$url);
        $output .= '<li class="page-item"><a class="page-link last_page" href="'.$link.'" title="最后页"> &gt;&gt; </a></li>';
    }else {
        $output .= '<li class="page-item"><a class="page-link netxt_page"> &gt; </a></li>';
        $output .= '<li class="page-item"><a class="page-link last_page"> &gt;&gt; </a></li>';
    }
    
    $output .= '<li class="page-item"><a class="total">总数 '.$total.'</a></li>';        
    $output .='</ul>
        </nav>
    </div>';
    return $output ;
}

手动更新Let’s Encrypt ssl证书

业余程序猿阅读(2075)

阿里云服务器对于没有备案的域名是无法访问的,手里面有一个pub域名没有备案,但是可以通过HTTPS的方式放到阿里云上面,既然用HTTPS,那么证书就选择最常见的Let’s Encrypt,oneinstack里面提供自动安装包,很是方便,可是用了一段时间发现问题了,证书续期的时候不能自动完成,找了一下可以通过下面命令手动完成

/usr/local/python/bin/certbot renew --force-renewal --renew-hook "/etc/init.d/nginx reload"

这个命令确实好用,但是发现备案过的域名都正常更新了,但是pub域名没有更新,查看日志发现,域名验证过程中出错,因为没有备案的域名不能通过阿里云访问,所以域名验证不成功,为了能正常访问,看来只能手动更新了。

第一步:进入网站https://www.sslforfree.com,填写自己的域名,点击按钮进入下一步,这就是对域名的验证了,因为HTTP不能访问,所以选择第三个按钮,通过DNS来验证。讲他们提供的两个DNS记录加以解析,解析生效后顺利进入下一步。这时就生成了证书的内容。

第二部:替换证书

cd /etc/letsencrypt/live/mydomain.com

进入证书文件夹会发现有四个文件cert.pem chain.pem fullchain.pem privkey.pem

由于是Nginx系统,所以需要修改fullchain.pem privkey.pem两个文件,将第一步得到Certificate内容替换fullchain.pem里面的内容,Private Key内容替换privkey.pem里面的内容。

保存之后 service nginx restart重启服务

 

 

VPS数据盘又罢工了

业余程序猿阅读(1037)

上次vps出现问题是8月的时候,不能登录ssh,后来官方解决了登录问题后,又不能修改文件夹和文件属性,整个数据盘为只读状态。经过官方指导修复数据盘,问题解决,今日同样问题官方同样是修复数据盘,为了方便,整理一下修复的流程。

首先创建快照

停止服务

/root/lnmpa stop

卸载

umount /dev/xvdb1

修复数据盘

fsck -y /dev/xvdb1

重新挂载数据盘

echo '/dev/xvdb1 /www ext4 defaults 0 0' >> /etc/fstab

mount -a

启动服务

/root/lnmpa start

ok,至此搞定。

此外备注一下,关于解决wordpress升级的时候需要填写FTP用户密码的方法:

chmod -R 755 /home/wwwroot
chown -R www /home/wwwroot