php静态分页
1. php如何实现网页静态
一、静态化的优点:
1有利于搜索引擎收录网站页面的信息:搜索引擎更喜欢静态的,更变于抓取,搜索引擎SEO排名会更容易提高。
2静态网页化网页稳定
3可以提高网页加载速度
4减轻服务器负担,浏览器不需要频发调用数据库。
5数据库出错不会影响正常访问
二、伪静态
PHP伪静态:是利用Apache mod_rewite实现url重写的方法
改写访问地址,能够通过URL的PATHINFO模式来改动它。让它看上去更像一个静态页面。从而有更大的几率被搜索引擎抓取和收录,仅是对搜索引擎比较友好,伪静态化
三、纯静态化
纯静态化,就是生成HTML文件的方式,我们须要开启PHP自带的缓存机制,即ob_start来开启缓存。而且在ob_start之前不能有不论什么输出,否则运行失败,然后我们用ob_get_contents函数来获取缓存中的内容,该函数会返回一个字符串。第三个函数就是ob_end_clean,它用来清空缓存中的内容而且关闭,成功返回True,失败返回False。
<?php
if(file_exists("match.html") && (time()-filemtime("match.html"))<300)
{
//如果存在对应的静态文件,则直接访问
require_once("match.html");
}else{
//这里用数组来仿真数据库操作,现实一般都是操作数据库得到对应数据
$student = array("huangxing","chenyuwei",'xufei','zhangjingwen','xuepei');
ob_start();
//载入模板
require_once("muban.php");
file_put_contents("match.html",ob_get_clean());
require_once('match.html');
}
2. PHP生成静态分页的问题
#test.php
$arr=array(
array('sv_id'=>1,'mid_id'=>1,'sv_question'=>20),
array('sv_id'=>2,'mid_id'=>2,'sv_question'=>10),
array('sv_id'=>3,'mid_id'=>1,'sv_question'=>20),
array('sv_id'=>4,'mid_id'=>3,'sv_question'=>20),
array('sv_id'=>5,'mid_id'=>2,'sv_question'=>20),
);
#包含分页类
include("../centpage_mode_class.php");
#创建分页对象
$cp=newCentpage();
#每页的行数
$pagesize=1;
#数组的长度
$sum=count($arr);
#分页
$pageinfor=$cp->centPages($pagesize,$sum);
#分页显示
for($i=$pageinfor['startRow'];$i<($pageinfor['startRow']+$pageinfor['pageSize']);$i++){
echo"id:".$arr[$i]['sv_id']."<br>";
echo"question:".$arr[$i]['sv_question']."<br>";
}
#分页控制项
echo$cp->centpageInfor($pageinfor);
#分页类
<?php
classCentpage{
var$page;
//centpage
functioncentPages($pageSize,$sumCount){
//computestartRowandstartPage
$page=null;
global$page;
if(isset($_GET['page'])){
$page=$_GET['page'];
}else{
$page=1;
}
$startRow=($page-1)*$pageSize;//startrow
//total
if($sumCount%$pageSize==0){
$sumPage=floor($sumCount/$pageSize);
}else{
$sumPage=floor($sumCount/$pageSize)+1;
}
$prePage=$page-1;//previous
$nextPage=$page+1;//next
//getreguestway
$url=$_SERVER['REQUEST_URI'];
$urlArray=parse_url($url);
$url=$urlArray['path'];
$arrPages=array("page"=>$page,"startRow"=>$startRow,"previous"=>$prePage,"next"=>$nextPage,
"total"=>$sumCount,"sumPage"=>$sumPage,"pageSize"=>$pageSize,"url"=>$url);
return$arrPages;
}
//centpageinformation
functioncentpageInfor($pageInfor){
echo" | 总记录:".(empty($pageInfor['total'])?0:$pageInfor['total'])." | ";
echo"共".(empty($pageInfor['sumPage'])?0:$pageInfor['sumPage'])."页 | ";
echo"第".(empty($pageInfor['page'])?0:$pageInfor['page'])."页 | ";
if(!empty($pageInfor)){
if($pageInfor['page']>1)echo"<ahref='".$pageInfor['url']."?page=1'>首页</a> | ";
if($pageInfor['total']>$pageInfor['pageSize']){
if($pageInfor['page']>=$pageInfor['sumPage']){
echo"<ahref='".$pageInfor['url']."?page=".$pageInfor['previous']."'>上一页</a> | 下一页 | ";
}elseif($pageInfor['page']<=1){
echo"上一页 | <ahref='".$pageInfor['url']."?page=".$pageInfor['next']."'>下一页</a> | ";
}else{
echo"<ahref='".$pageInfor['url']."?page=".$pageInfor['previous']."'>上一页</a> | ";
echo"<ahref='".$pageInfor['url']."?page=".$pageInfor['next']."'>下一页</a> | ";
}//endif
}//endif
if($pageInfor['page']<$pageInfor['sumPage'])
echo"<ahref='".$pageInfor['url']."?page=".$pageInfor['sumPage']."'>末页</a> | ";
}//endif!empty
}
}
?>
3. [php]我弄为静态 这个分页的正则怎么写
.*是贪婪匹配,这里应该用.*?
试试
RewriteRule ^/category_(.*?)_(.*?)_(.*?)_(.*?).html$ /category.php?action=$1&type=$2&bclassid=$3&page=$4
4. php分页代码 怎么写
Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。
一、分页程序的原理
分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page)。有了这两个参数就可以很方便的写出分页程序,我们以Mysql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。
二、主要代码解析
$pagesize=10; //设置每一页显示的记录数
$conn=mysql_connect("localhost","root",""); //连接数据库
$rs=mysql_query("select count(*) from tb_proct",$conn); //取得记录总数$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//计算总页数
$pages=intval($numrows/$pagesize);
//判断页数设置
if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
$page=1; //否则,设置为第一页
}
三、创建用例用表myTable
create table myTable(id int NOT NULL auto_increment,news_title varchar(50),news_cont text,add_time datetime,PRIMARY KEY(id))
四、完整代码
<html>
<head>
<title>php分页示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<?php
$conn=mysql_connect("localhost","root","");
//设定每一页显示的记录数
$pagesize=1;
mysql_select_db("mydata",$conn);
//取得记录总数$rs,计算总页数用
$rs=mysql_query("select count(*) from tb_proct",$conn);
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//计算总页数
$pages=intval($numrows/$pagesize);
if ($numrows%$pagesize)
$pages++;
//设置页数
if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
//设置为第一页
$page=1;
}
//计算记录偏移量
$offset=$pagesize*($page - 1);
//读取指定记录数
$rs=mysql_query("select * from myTable order by id desc limit $offset,$pagesize",$conn);
if ($myrow = mysql_fetch_array($rs))
{
$i=0;
?>
<table border="0" width="80%">
<tr>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">标题</td>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">发布时间</td>
</tr>
<?php
do {
$i++;
?>
<tr>
<td width="50%"><?=$myrow["news_title"]?></td>
<td width="50%"><?=$myrow["news_cont"]?></td>
</tr>
<?php
}
while ($myrow = mysql_fetch_array($rs));
echo "</table>";
}
echo "<div align='center'>共有".$pages."页(".$page."/".$pages.")";
for ($i=1;$i< $page;$i++)
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
echo "[".$page."]";
for ($i=$page+1;$i<=$pages;$i++)
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
echo "</div>";
?>
</body>
</html>
五、总结
本例代码在windows2000 server+php4.4.0+mysql5.0.16上运行正常。该示例显示的分页格式是[1][2][3]…这样形式。假如想显示成“首页 上一页 下一页 尾页”这样形式,请加入以下代码:
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
if ($page > 1)
{
echo "<a href='fenye.php?page=".$first."'>首页</a> ";
echo "<a href='fenye.php?page=".$prev."'>上一页</a> ";
}
if ($page < $pages)
{
echo "<a href='fenye.php?page=".$next."'>下一页</a>
echo "<a href='fenye.php?page=".$last."'>尾页</a> ";
}
其实,写分页显示代码是很简单的,只要掌握了它的工作原理。希望这篇文章能够带给那些需要这方面程序web程序员的帮助。
5. php+smarty静态分页 奇怪生成一条相同的记录 高手帮看看几天了都没看出来 在线等...
问题大致如一楼所说,造成此问题的原因在于你对$start_page的计算方法的错误。
正确代码为:
for($i=0;$i<$pages;$i++)
{
$start_page =$i*$pagecount;
}
你原来为$start_page=$i*$start_page ,而且$start_page是没有赋初值的
6. PHP怎么制作分页
方法/步骤
首先要了解下分页的原理即
SELECT * FROM table …… limit 开始位置 , 操作条数
开始位置从0开始
SELECT * FROM table …… limit 0 , 20
取最前面20条
SELECT * FROM table …… limit 10 , 20
11条到20条
其次分页要用的公式
得到公式
(当前页数 - 1 )X 每页条数 , 每页条数
Select * from table limit ($Page- 1) * $PageSize, $PageSize
还要了解parse_url()解析URL函数
parse_url() 是讲URL解析成有固定键值的数组的函数
$ua=parse_url("http://username:password@hostname/path?arg=value#anchor");
print_r($ua);
结果:
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
创建数据库bbs和表test有
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) character set gb2312 NOT NULL,
`sex` varchar(2) character set gb2312 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
然后插入十几条测试数据即可
写mysql数据库连接代码保存conn.php文件里
代码如下
<?php
$conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误");
mysql_select_db("bbs", $conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
function htmtocode($content) {
$content = str_replace("\n", "<br>", str_replace(" ", " ", $content));
return $content;
}
//$content=str_replace("'","'",$content);
//htmlspecialchars();
?>
写分页函数page.php
代码如下
<?php
function _PAGEFT($totle, $displaypg = 20, $url = '') {
global $page, $firstcount, $pagenav, $_SERVER;
$GLOBALS["displaypg"] = $displaypg;
if (!$page)
$page = 1;
if (!$url) {
$url = $_SERVER["REQUEST_URI"];
}
//URL分析:
$parse_url = parse_url($url);
$url_query = $parse_url["query"]; //单独取出URL的查询字串
if ($url_query) {
$url_query = ereg_replace("(^|&)page=$page", "", $url_query);
$url = str_replace($parse_url["query"], $url_query, $url);
if ($url_query)
$url .= "&page";
else
$url .= "page";
} else {
$url .= "?page";
}
$lastpg = ceil($totle / $displaypg); //最后页,也是总页数
$page = min($lastpg, $page);
$prepg = $page -1; //上一页
$nextpg = ($page == $lastpg ? 0 : $page +1); //下一页
$firstcount = ($page -1) * $displaypg;
//开始分页导航条代码:
$pagenav = "显示第 <B>" . ($totle ? ($firstcount +1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B> 条记录,共 $totle 条记录";
//如果只有一页则跳出函数:
if ($lastpg <= 1)
return false;
$pagenav .= " <a href='$url=1'>首页</a> ";
if ($prepg)
$pagenav .= " <a href='$url=$prepg'>前页</a> ";
else
$pagenav .= " 前页 ";
if ($nextpg)
$pagenav .= " <a href='$url=$nextpg'>后页</a> ";
else
$pagenav .= " 后页 ";
$pagenav .= " <a href='$url=$lastpg'>尾页</a> ";
//下拉跳转列表,循环列出所有页码:
$pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";
for ($i = 1; $i <= $lastpg; $i++) {
if ($i == $page)
$pagenav .= "<option value='$i' selected>$i</option>\n";
else
$pagenav .= "<option value='$i'>$i</option>\n";
}
$pagenav .= "</select> 页,共 $lastpg 页";
}
include("conn.php");
$result=mysql_query("SELECT * FROM `test`");
$total=mysql_num_rows($result);
//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉).
_PAGEFT($total,5);
echo $pagenav;
$result=mysql_query("SELECT * FROM `test` limit $firstcount,$displaypg ");
while($row=mysql_fetch_array($result)){
echo "<hr><b>".$row[name]." | ".$row[sex];
}
?>
调用数据和分页list.php
<?php
/**
* 爱微网 www.iiwnet.com/php/
*/
include("conn.php");
$pagesize=5;
$url=$_SERVER["REQUEST_URI"];
$url=parse_url($url);
$url=$url[path];
$numq=mysql_query("SELECT * FROM `test`");
$num = mysql_num_rows($numq);
if($_GET[page]){
$pageval=$_GET[page];
$page=($pageval-1)*$pagesize;
$page.=',';
}
if($num > $pagesize){
if($pageval<=1)$pageval=1;
echo "共 $num 条".
" <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>";
}
echo $SQL="SELECT * FROM `test` limit $page $pagesize ";
$query=mysql_query($SQL);
while($row=mysql_fetch_array($query)){
echo "<hr><b>".$row[name]." | ".$row[sex];
}
?>
注意事项
注意分页公式写法你只要记住即可;
(当前页数 - 1 )X 每页条数 , 每页条数;
Select * from table limit ($Page- 1) * $PageSize, $PageSize;
注意三个代码文件在同一个目录下;
主要是最后的list.php调用代码要细看很有用。
7. php做分页做伪静态,我不知道为什么分类的id对不上
只要你动态显示没问题,那么就是伪静态规则有问题。
如果动态都显示有问题,那么就是分页代码有问题。
请从以上2个方面进行排查。
8. PHP中分页伪静态链接要如何设置
Rewrite规则已经写好,剩下的只是需要将分页链接修改为proct_list1.html就可以了。
<a href="proct_list1.html">第一页</a>
<a href="proct_list<?php echo $pageCount; ?>.html">最末页</a>
<a href="proct_list<?php echo $pageprev; ?>.html">前一页</a>
9. PHP生成静态分页问题
在你的程序前面添加下面一行即可(<?php之后添加):
set_time_limit (0);
10. php用ob系列生成html静态页面如何进行内容分页
具体不知道你是怎么个生成静态页面法,是用户访问一页生成一页,还是事先在后台手动生成所有页,不过静态页面分无非两种思路,一个就是用JS来实现虚分页,这种方法就是将需分页显示的所有页内容都生成在一个静态页面内,然后用JS来控制特定DIV或LI等标签来现实分页,另一种就是PHP实现的硬分页,就是在生成页面时将所有内容通过PHP解析处理后都取出放在一个数组A内,如A[0]的内容就是第一页,A[1]就是第二页的内容,如此形式,然后再循环生成这些页,记得自己还要造构一个分页条,类似 [1] [2] [3] ... 分别关联到具体页面,如test0.html,test1.html,test2.html...如此形式就行了.不知道各位还有没其他更好的办法?