在windows2003系统里的administrator账号禁用后的解决方法

windows2003里!administrator账号禁用了,如何启用此账户呢,就只有这一个用户的,其实方法很简单的,我们可能通过重新启动服务器,按下F8键,在出现的dos菜单时,我们选择进入到安全模式下,用原来的用户名和密码登陆(在安全模式下被禁用的账户可以照常登陆的)。我们进去后,把账户重新启用即可。

LINUX下加载U盘的方法

    首先,进入 ROOT 方式(指当前用户采用非root用户登陆时):
    敲击命令 su root
    成功后
    显示 PASSWORD:  这时应该键入 用户 root 的登陆密码.
   
    第二步,确定在 目录 /mnt 下建立了 文件夹 /usb,如果未建立可键入一下命令:
            md /mnt/usb
            成功后进行下一步。
   
    第三步, 载入 u 盘,需键入以下命令:
             mount /dev/sda1 /mnt/usb
             成功后,即可使用 u 盘了
             u 盘里的文件 就在目录 /mnt/usb 下。
   
    第四步,卸载u盘
            在使用完u盘后,在拔出前需要先键入卸载U盘命令
            命令如下:
            umount /mnt/usb

IIS5.0 IIS5.1 IIS6.0 IIS安装包 系列下载

IIS5.1 windows xp用

我感觉大家用到IIS安装包也都在网吧吧, 网吧一般都是xp吧,所以说IIS5.1才是最实用的  下载地址1 http://www.softhy.net/softhy.net_down/softhy.net_iis51.rar
下载地址2 http://zycode.com/code/server/1804.html

IIS5.0 windows 2000用

下载地址1 http://cq.down.chinaz.com/soft11/iis5.rar
下载地址2 http://sc.down.cnzzz.com/vvdcnzzz/soft11/iis5.rar
下载地址3http://down21.codefans.com/server/IIS5.rar
下载地址4http://down21.codes.com.cn/server/IIS5.rar

IIS6.0 windows 2003用

下载地址1http://www.zycode.com/code/server/1487.html
下载地址2http://ftpa.xiaoshen.cn:2121/2005/09/IIS6.0.rar

adodb教程:产生 Update 及 Insert 的SQL指令

ADODB 1.31版起,新增了两个资料集函数:GetUpdateSQL()及GetInsertSQL()。这允许你在执行了像”Select * FROM table query Where…”这样的查询函数後,建立一个 $rs->fields复本,改变这些栏位,然後自动产生出更新或是新增的SQL指令。

以下我们展示如何运用这些函数,我们将存取一个资料表,带有下列栏位:(ID,FirstName,LastName,Created)。在这些函数被执行前,你需要藉由一个对资料表的查询指令(select)来初始化一个资料集。

<?
#==============================================
#  GetUpdateSQL() 及 GetInsertSQL() 范例码
#==============================================
include(‘ADOdb.inc.php’);
include(‘tohtml.inc.php’);

#==========================
# 以下的程式代码为测试新增状态

$conn = &ADONewConnection(“mysql”);  # 建立一个连结
$conn->debug=1;
$conn->PConnect(“localhost”, “admin”, “”, “test”); # 连结到 MySQL, 资料库名称为 test


$sql = “Select * FROM ADOXYZ Where id = -1”; 
# 从资料库中查询出一个空的资料集
$rs = $conn->Execute($sql); # 执行查询,并取得一个空的资料集 初始化记录集,以便下面保存,

$record = array(); # 初始化一个阵列,以便存放记录资料供新增用

# 设定记录中的栏位值
$record[“firstname”] = “Bob”;
$record[“lastname”] = “Smith”;
$record[“created”] = time();

# 传入空的资料集及栏位资料阵列到GetInsertSQL函数中,以执行功能
# 这个函数将会依传入的资料,回传一个全格式的 Insert SQL指令

$insertSQL = $conn->GetInsertSQL($rs, $record);

$conn->Execute($insertSQL); # 将记录挿入资料库中

#==========================
# 以下的程式码测试更新状态

$sql = “Select * FROM ADOXYZ Where id = 1”; 
# 选择一笔记录以便更新

$rs = $conn->Execute($sql); # 执行这个查询,并取得一个存在的记录来更新

$record = array(); # 初始化一个阵列,以存放要更新的资料

# 设定栏位里的值
$record[“firstname”] = “Caroline”;
$record[“lastname”] = “Smith”; # 更新 Caroline的姓由 Miranda 变成 Smith

# 传入这个只有单一记录的资料集以及含有资料的阵列到 GetUpdateSQL函数里
# 函数将会回传一个具有正确 Where 条件的 Update(更新) SQL 指令

$updateSQL = $conn->GetUpdateSQL($rs, $record);

$conn->Execute($updateSQL); # 更新资料库中的记录
$conn->Close();
?>

mysql中DATETIME、DATE 和 TIMESTAMP 类型数据使用

DATETIMEDATETIMESTAMP 类型是相似的。这个章节描述了它们的特性以及它们的相似点与不同点。

DATETIME 类型可用于需要同时包含日期和时间信息的值。MySQL 以 'YYYY-MM-DD HH:MM:SS' 格式检索与显示 DATETIME 类型。支持的范围是 '1000-01-01 00:00:00''9999-12-31 23:59:59'。(“支持”的含义是,尽管更早的值可能工作,但不能保证他们均可以。)

DATE 类型可用于需要一个日期值而不需要时间部分时。MySQL 以 'YYYY-MM-DD' 格式检索与显示 DATE 值。支持的范围是 '1000-01-01''9999-12-31'

TIMESTAMP 列类型提供了一种类型,通过它你可以以当前操作的日期和时间自动地标记 InsertUpdate 操作。如果一张表中有多个 TIMESTAMP 列,只有第一个被自动更新。

自动更新第一个 TIMESTAMP 列在下列任何条件下发生:

  • 列值没有明确地在一个 InsertLOAD DATA INFILE 语句中被指定。
  • 列值没有明确地在一个 Update 语句中被指定,并且其它的一些列值已发生改变。(注意,当一个 Update 设置一个列值为它原有值时,这将不会引起 TIMESTAMP 列的更新,因为,如果你设置一个列值为它当前值时,MySQL 为了效率为忽略更新。)
  • 明确地以 NULL 设置 TIMESTAMP 列。

第一个列以外其它 TIMESTAMP 列,可以设置到当前的日期和时间,只要将该列赋值 NULLNOW()

任何 TIMESTAMP 列均可以被设置一个不同于当前操作日期与时间的值,这通过为该列明确指定一个你所期望的值来实现。这也适用于第一个 TIMESTAMP 列。这个选择性是很有用的,举例来说,当你希望 TIMESTAMP 列保存该记录行被新添加时的当前的日期和时间,但该值不再发生改变,无论以后是否对该记录行进行过更新:

  • 当该记录行被建立时,让 MySQL 设置该列值。这将初始化该列为当前日期和时间。
  • 以后当你对该记录行的其它列执行更新时,为 TIMESTAMP 列值明确地指定为它原来的值。

另一方面,你可能发现更容易的方法,使用 DATETIME 列,当新建记录行时以 NOW() 初始化该列,以后在对该记录行进行更新时不再处理它。

示例(译者注):

mysql> Create TABLE `tA` (
->   `id` int(3) unsigned NOT NULL auto_increment,
->     `date1` timestamp(14) NOT NULL,
->     `date2` timestamp(14) NOT NULL,
->     PRIMARY KEY  (`id`)
-> ) TYPE=MyISAM;
Query OK, 0 rows affected (0.01 sec)
mysql> Insert INTO `tA` SET `id` = 1;
Query OK, 1 row affected (0.02 sec)
# 没有明确地指定第一个 timestamp 列值,该列值被设为插入的当前时刻
# 没有明确地指定其它的 timestamp 列值,MySQL 则认为插入的是一个非法值,而该列值被设为0
mysql> Insert INTO `tA` S (2, NOW(), NULL);
Query OK, 1 row affected (0.01 sec)
mysql> Select * FROM `tA`;
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  1 | 20030503104118 | 00000000000000 |
|  2 | 20030503104254 | 20030503104254 |
+----+----------------+----------------+
2 rows in set (0.00 sec)
mysql> Update `tA` SET `id` = 3 Where `id` = 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
# 对某一记录行进行了更新,第一个 timestamp 列值也将被更新
mysql> Update `tA` SET `id` = 2 Where `id` = 2;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0
# MySQL 忽略了这次操作,第一个 timestamp 列值不会被更新
mysql> Select * FROM `tA`;
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  3 | 20030503104538 | 00000000000000 |
|  2 | 20030503104254 | 20030503104254 |
+----+----------------+----------------+
2 rows in set (0.00 sec)
mysql> Update `tA` SET `id` = 1,`date1`=`date1` Where `id` = 3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
# 明确地指定了第一个 timestamp 列值为它原有值,该值将不会被更新
mysql> Select * FROM `tA`;
+----+----------------+----------------+
| id | date1          | date2          |
+----+----------------+----------------+
|  1 | 20030503104538 | 00000000000000 |
|  2 | 20030503104254 | 20030503104254 |
+----+----------------+----------------+
2 rows in set (0.00 sec)
* 以上结果在 MySQL 4.0.12 中测试

自定义404页面返回不当状态码

HTTP 404 错误意味着链接指向的网页不存在。在网站建设中想要完全避免这种情况是不可能的,比如说,我们常常需要对网站进行调整、改版,便会有网页被删除、改名或移动位置,这时候,虽然相应内容的网页还存在于网站中,但使用原来的地址访问则无法访问。——当然,对这类情况首先要考虑的是为原来页面地址做301重定向,以尽可能地减小对SEO效果的影响。——其次,在别人建立指向网站的链接时,也可能会由于出现拼写错误而使其成为一个无效的链接:在网站内找不到相应的内容页面。

简单说来,这类无效链接是由web服务器自动处理的:当Web 服务器接到类似的数据请求量,会返回一个 404 状态码,告诉对方其要请求的资源并不存在。但是,Web服务器默认的404错误页面,无论Apache还是IIS,均十分简陋、呆板且对用户不友好,无法给予用户寻找相应信息的更多线索,用户看到这类页面往往最直接的反应并是关闭浏览器窗口离开,这在很大程度上给网站造成损失。毕竟,对网站来说,用户永远是最重要的资源,以这种方式损失用户更意味着某种程度的失败。

这也是许多网站使用自定义404 错误页面的原因。通过良好的自定义404页面,可以包含对网站的相应介绍、用户可能感兴趣的内容链接或者网站内容导航链接、内容搜索功能等,能够有效地帮助访问者找到其欲寻找的内容或相似的内容,提高用户在网站内浏览更多信息的机会。

自定义404错误页面返回“200”或“302”状态码

从严格的技术角度,网站对404错误的处理策略,并不是一个SEO方面的工作,而属于网站可用性(usability)方面的问题。——当然,如果从广义的SEO范畴来看,提高网站可用性也属于SEO的基本操作。——但是,如果自定义404错误页面设置不当,则会极大地影响网站的SEO效果。

在许多朋友的印象中,自定义404错误页面只要能正确显示,只要能输入网站内某个并不存在的网页地址,在浏览器中能看到自定义的错误信息,便说明设置没问题。惭愧地说,本人也是抱有这种想法的一员,IT技术点评运行将近一年了,近日因Google更新后排名下降检查网站时才发现存在类似的错误:一个正确设置的404页面,不仅应当正确地显示,同时,应该能够正确返回“404”错误代码,而不是“200”或“302”。虽然对访问的用户而言,HTTP状态码究竟是“404”还是“200”来说并没有什么区别,但对搜索引擎而言,这则是相当重要的。

为什么这么说呢?让我们先来回顾一下搜索引擎收录与索引网页的过程:搜索引擎的Spider向网站服务器发送请求,要求读取某个网页,网站服务器接到请求后返回 HTTP 状态码响应请求,这些返回的HTTP状态码决定着搜索引擎的下一步行动:将该网页收录到索引数据库或者将其从索引数据库删除等。

当然,HTTP状态码有很多种,分别对应不同的情况,下面就与本文内容相关的几种作一简单介绍,更详细的信息可参考W3C规范:

  • 404 : 请求的网页不存在(不排除日后该链接有效的可能性);
  • 410 : 请求的网页不存在(永久);
  • 200 : 服务器成功返回网页
  • 302 : 网址临时重定向(跳转)
  • 301 : 网址永久重定向

需要说明的是,大部分搜索引擎将“404”与“410”状态同等对待,如Google。(参见Matt Cutts的说明)

当搜索引擎在请求某个Url时得到“404”状态回应时,便会知道该网页在网站内不复存在,从而在索引数据库中将其删除,——当然,这个删除过程有可能需要很长时间——而当搜索引擎得到“200”状态回应时,则会认为该url是有效的,并将其回到到索引数据库中。

404页面返回“200”状态码的后果

如果网站的自定义404错误页面在url无效时不返回“404”状态码而代之以“200”,会发生什么情况呢?很明显,搜索引擎会认为这个“根本不存在的”网页在网站内是存在的,这会导致很多问题,影响网站的最终SEO效果。

举例来说,比如说对“http://www.haohtml.com/a.html”、“http://www.haohtml.com/b.html”这两个在IT技术点评网站内并不存在的url而言,如果搜索引擎得到的回应状态码是“200”,那么,便会将其收录到索引数据库,这样的结果便是这两个不同的url具有完全相同的内容:自定义404错误页面的内容,这类重复文本(Duplicate Content)的现象对许多搜索引擎而言都是大忌。尤其是考虑到网站中不可能只有这两个无效链接,毕竟在网站建设中,无论网站的内部链接还是外部链接,总会不可避免地出现许多比如说拼写错误的情况,类似的重复内容会更多。这样,对搜索引擎而言,特别是Google,不但很难获得理想的网站信任指数,也会大大降低Google对网站质量的评定。

404错误页使用Meta Refresh带来的302问题

常常看到许多网站的自定义404错误页面采取类似这样的形式:首先显示一段错误信息,然后,通过Meta Refresh将页面跳转到网站首页、网页地图或其他类似页。根据具体实现方式不同,这类404页面可能返回“200”状态码,也可能返回“302”,但不论哪种,从SEO的角度看,均不是一种合适的选择。

对“200”状态的情况我们上面已经谈过,那么,当404页面返回“302”时,搜索引擎会怎么对待呢?从理论上说,对“302”错误,搜索引擎认为该网页是存在的,只不过临时改变了地址,仍然会索引收录该页,这样,同样会出现类似于“200”状态码时的重复文本问题;其次,以google为代表的主流搜索引擎对302重定向的适用范围要求越来越严格,这类不当使用302重定向的情况存在很大的风险。

因此,尽量不要在404错误页中使用这类Meta Refresh方法。如果实现希望实现类似的功能,即让显示错误信息几(十)秒后跳转到首页或其他页面,可以考虑在404错误页中使用Java Script跳转。——Java Script对搜索引擎而言是无益同时也无害的。

确保自定义404错误页面能够返回“404”状态码

在自定义404错误页面设置完毕后,一定要检查一下其是不是能够正确地返回“404”状态码。

检查的方法也相当简单,使用本站提供的Server Header检查工具,或其他类似工具如这个,输入一个网站内不存在网页的url,查看一下HTTP Header的返回情况,确信其返回的是“404 Not found”。

SEO与404错误处理方式

      在“通过HTTP状态码查看搜索引擎蜘蛛如何爬行你的网站”一文中,我介绍了一些经常涉及到的HTTP状态码及含义,譬如大家经常探讨并且与本文相关的Http状态码:

404:服务器找不到指定的资源,请求的网页不存在(譬如浏览器请求的网页被删除或者移位,但不排除日后该链接有效的可能性);
410:请求的网页不存在(注意:410表示永久性,而404表示临时性);
200:服务器成功返回请求的网页;
301:网址永久性重定向
302:网址临时性重定向

注意:大部分搜索引擎将“404”与“410”状态同等对待,如Google。(参见Matt Cutts的说明)

对HTTP404状态码的理解

  HTTP 404 错误意味着链接指向的网页不存在,即原始网页的URL失效,这种情况经常会发生,很难避免,比如说:网页URL生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的URL地址无法访问;当Web 服务器接到类似请求时,会返回一个404 状态码,告诉浏览器要请求的资源并不存在。但是,Web服务器默认的404错误页面,无论Apache还是IIS,均十分简陋、呆板且对用户不友好,无法给用户提供必要的信息以获取更多线索,无疑这会造成用户的流失。

  因此,很多网站均使用自定义404错误的方式以提供用户体验避免用户流失。一般而言,自定义404页面通用的做法是在页面中放置网站快速导航链接、搜索框以及网站提供的特色服务,这样可以有效的帮助用户访问站点并获取需要的信息。

HTTP404对SEO的影响

  自定义404错误页面是提供用户体验的很好的做法,但在应用过程中往往并未注意到对搜索引擎的影响,譬如:错误的服务器端配置导致返回“200”状态码或自定义404错误页面使用Meta Refresh导致返回“302”状态码。正确设置的自定义404错误页面,不仅应当能够正确地显示,同时,应该返回“404”错误代码,而不是“200”或“302”。虽然对访问的用户而言,HTTP状态码究竟是“404”还是“200”来说并没有什么区别,但对搜索引擎而言,这则是相当重要的。

(一)自定义404错误页返回“200”状态码

  当搜索引擎蜘蛛在请求某个URL时得到“404”状态回应时,即知道该URL已经失效,便不再索引该网页,并向数据中心反馈将该URL表示的网页从索引数据库中删除,当然,删除过程有可能需要很长时间;而当搜索引擎得到“200”状态回应时,则会认为该url是有效的,便会去索引,并会将其收录到索引数据库,这样的结果便是这两个不同的url具有完全相同的内容:自定义404错误页面的内容,这会导致出现复制网页问题。对搜索引擎而言,特别是Google,不但很难获得信任指数TrustRank,也会大大降低Google对网站质量的评定。(为什么会出现返回“200”状态码的情况??请参看下面内容“自定义404错误页面的基本原则”)

  我一直在使用Google Sitemap,当我们提交XML格式网站地图文件时,Google会验证我们的身份以确保是网站合法的管理者。验证方式有两种:上传指定名称的html页到网站根目录或者在网页meta区域添加一个标识身份的meta标签。我通常是使用上传html网页的方式,但Google却提示我网站根目录下找不到这个网页(实际上我已上传,并且通过浏览器可以访问),这是一个很可怕的问题,见图:

(二)自定义404错误页使用Meta Refresh返回“302”状态码

  常常看到许多网站的自定义404错误页面采取类似这样的形式:首先显示一段错误信息,然后,通过Meta Refresh将页面跳转到网站首页、网页地图或其他类似页。根据具体实现方式不同,这类404页面可能返回“200”状态码,也可能返回“302”,但不论哪种,从SEO技术角度看,均不是一种合适的选择。

  对“200”状态的情况我们上面已经谈过,那么,当404页面返回“302”时,搜索引擎会怎么对待呢?从理论上说,对“302”错误,搜索引擎认为该网页是存在的,只不过临时改变了地址,仍然会索引收录该页,这样,同样会出现类似于“200”状态码时的重复文本问题;其次,以google为代表的主流搜索引擎对302重定向的适用范围要求越来越严格,这类不当使用302重定向的情况存在很大的风险。

确保自定义404错误页面能够返回“404”状态码

  在自定义404错误页面设置完毕后,一定要检查一下其是不是能够正确地返回“404”状态码。可以使用Server Header检查工具,输入一个不存在网页的url,查看一下HTTP Header的返回情况,确信其返回的是“404 Not found”。

404错误的处理方式
(一)定制404错误页面的基本原则

  首先应明确的是,404错误应工作在服务器级而不是网页级。对定制使用动态页面如PHP脚本类型的404页时,必须确保在PHP执行前服务器已经顺利地送出“404”状态码,不然,一旦执行到了ISAPI级别,返回的状态码便只能是“200”或其他如“302”之类的重定向状态码了。

  其次,在自定义网站的404错误页面时,对设置的错误页面URL链接应使用相对路径而不是绝对路径,而且自定义404页面应该放在网站根目录下。尽管无效链接可能是多种形式的URL,但当发生404访问错误时,WEB服务器会自动将其转到自定义的当404错误页中,这跟URL的形似没有关系。

(二)Apache下设置404错误页面

  为Apache Server设置 404错误页面的方法很简单,只需在.htaccess 文件中加入如下内容即可:

ErrorDocument 404 /notfound.php

注意:
1.切记不要将404错误转向到网站主页,否则可能会导致主页在搜索引擎中消失
2.切记不要使用绝对URL(例如:http://www.bloghuman.com/nofound.php形式),如果使用绝对URL返回的状态码是“302”+“200”(已测试)

(三)IIS/ASP.net下设置404错误页面

首先,修改应用程序根目录的设置,打开 “web.config” 文件编辑,在其中加入如下内容:
<configuration>
<system.web>
<customErrors mode=”On” defaultRedirect=”error.asp”>
<error statusCode=”404″ redirect=”notfound.asp” />
</customErrors>
</system.web>
</configuration>

注:上文例中“error.asp”为系统默认的404页面,“notfound.asp”为自定义的404页面,使用时请修改相应文件名。

然后,在自定义的404页面“notfound.asp”中加入:

<%
Response.Status = “404 Not Found”
%>

这样,便可以保证IIS能够正确地返回“404”状态码

(四)在IIS/ASP.net下设置404静态页面

设置静态404错误页面的方法则比较简单,在IIS管理器中右键单击要管理的网站,打开“属性”中的“自定义错误信息”页,为“404
”设定相应的错误信息页即可.

从日志中恢复SQLServer数据库到时间点

      DB2中可以使得数据库回复到指定的时间点,SQL Server数据库的Recovery Model为full 或者Bulk copy的时候,是可以从日志来恢复数据库的。实际上日志中记录的一条一条的transact sql语句,恢复数据库的时候会redo这些sql语句。
 
前提条件:myBBS是数据库test中的一个表,

          数据库test的Recovery Model为Full,Auto Close,Auto Shrink两个选项未选中。

          数据库test的data files和log files均为默认的自动增长状态。

A:2004/10/13,16:00进行数据库备份,backup database test to disk=’d:\db\1600.bak’ with init

B:2004/10/14,13:00对数据库进行了update,delete等操作;
C:2004/10/15,18:00使用delete mybbs where id>300时,语句误写成delete mybbs,因而删除了表mybbs中的所有数据。
 
现在在C点,C点对数据库进行了误操作,我们希望数据库能够恢复到C之前的状态,比如恢复到10月15日17:59分的状态。
要恢复数据库B点,使用的是A点备分的数据库1600.bak;而使用的日志备分是最新的备分1820.logs;因而进行如下操作:

–备分日志:BACKUP LOG test TO DISK=’d:\1820.logs’ WITH INIT 
–恢复数据库1600.bak,使用WITH NORECOVERY参数:RESTORE DATABASE test from disk=’d:\db\1640.bak’ WITH NORECOVERY 
–使用日志恢复数据库到10月15日17:59分:
RESTORE LOG test
        FROM disk=’d:\1820.logs’ WITH RECOVERY,STOPAT=’10/15/2004 17:59′

 
 
上面的三条Transact SQL语句的对应过程:
      1.恢复数据库到A点;
      2.执行A-B之间的log记录,把数据库恢复到B点.
 
 
       这样就恢复数据库到了指定的时间点。如果恢复不成功,可能的原因是:1.未使用正确的备分数据库;2.数据库选项选中了Auto Shrink.

在sql server中改变表的所有者

        在对数据库进行移植的时候,经常会发现表的所有者发生了改变,而造成数据表拒绝访问,我们可以通过下面的语句来修改数据表的所有者:

EXEC sp_changeobjectowner ‘super.article’, ‘dbo’

这个我们就可以dbo的身份对数据库中的表进行相应的操作了!

adodb和smarty分页类

  1. <?php   
  2.     class show_Pager   
  3.     {   
  4.       protected  $_total;                          //记录总数   
  5.       protected  $pagesize;                       //每一页显示的记录数   
  6.       public     $pages;                         //总页数   
  7.       protected  $_cur_page;                    //当前页码   
  8.       protected  $offset;                      //记录偏移量   
  9.       protected  $pager_Links;                //url连接   
  10.       protected  $pernum = 5;                //页码偏移量,这里可随意更改   
  11.        
  12.       public function __construct($total,$pagesize,$_cur_page)   
  13.         {      
  14.         $this->_total=$total;   
  15.         $this->pagesize=$pagesize;   
  16.         $this->_offset();   
  17.         $this->_pager();   
  18.         $this->cur_page($_cur_page);   
  19.         $this->link();   
  20.     }   
  21.        
  22.     public  function _pager()//计算总页数   
  23.     {    
  24.     return $this->pages = ceil($this->_total/$this->pagesize);   
  25.     }   
  26.       
  27.       
  28.     public function cur_page($_cur_page//设置页数   
  29.     {        
  30.                if (isset($_cur_page))   
  31.            {   
  32.            $this->_cur_page=intval($_cur_page);   
  33.            }   
  34.            else  
  35.            {   
  36.             $this->_cur_page=1; //设置为第一页   
  37.            }   
  38.         return  $this->_cur_page;   
  39.    }   
  40.       
  41. //数据库记录偏移量   
  42.    public function _offset()   
  43.    {   
  44.    return $this->offset=$this->pagesize*($this->_cur_page-1);   
  45.    }   
  46.       
  47.   //html连接的标签    
  48.   public function link()   
  49.   {   
  50.     if ($this->_cur_page == 1 && $this->pages>1)    
  51.         {   
  52.             //第一页   
  53.             $this->pager_Links = "首 页 | 上一页 | <a href=".$PHP_SELF."?pager=".($this->_cur_page+1).">下一页</a> | <a href=".$PHP_SELF."?pager=$this->pages>尾 页</a>";   
  54.         }    
  55.         elseif($this->_cur_page == $this->pages && $this->pages>1)    
  56.         {   
  57.             //最后一页   
  58.              $this->pager_Links = "<a href=".$PHP_SELF."?pager=1>首 页<a> | <a href=".$PHP_SELF."?pager=".($this->_cur_page-1).">上一页</a> | 下一页 | 尾 页";   
  59.         }    
  60.         elseif ($this->_cur_page > 1 && $this->_cur_page <= $this->pages)    
  61.         {   
  62.             //中间   
  63.              $this->pager_Links = "<a href=".$PHP_SELF."?pager=1>首 页<a> | <a href=".$PHP_SELF."?pager=".($this->_cur_page-1).">上一页</a> | <a href=".$PHP_SELF."?pager=".($this->_cur_page+1).">下一页</a> | <a href=".$PHP_SELF."?pager=$this->pages>尾 页</a>";   
  64.         }    
  65.         return $this->pager_Links;   
  66.   }   
  67.      
  68.   //html数字连接的标签   
  69.    public function num_link()   
  70.   {   
  71.        $setpage  = $this->_cur_page ? ceil($this->_cur_page/$this->pernum) : 1;   
  72.         $pagenum   = ($this->pages > $this->pernum) ? $this->pernum : $this->pages;   
  73.         if ($this->_total  <= $this->pagesize) {   
  74.             $text  = ‘只有一页’;   
  75.         } else {   
  76.             $text = ‘页数:’.$this->pages.‘ ‘.$this->pagesize.‘个/页 ‘;   
  77.             if ($this->_cur_page > 1) {   
  78.                 $text .= ‘<a title=第一页 href=?pager=1>[1]</a>..’;   
  79.             }   
  80.             if ($setpage > 1) {   
  81.                 $lastsetid = ($setpage-1)*$this->pernum;   
  82.                 $text .= ‘<a title=上一列 href=?pager=’.$lastsetid.‘>[<<]</a>’;   
  83.             }   
  84.             if ($this->_cur_page > 1) {   
  85.                 $pre = $this->_cur_page-1;   
  86.                 $text .= ‘<a title=上一页 href=?pager=’.$pre.‘>[<]</a>’;   
  87.             }   
  88.             $i = ($setpage-1)*$this->pernum;   
  89.             for($j=$i$j<($i+$pagenum) && $j<$this->pages; $j++) {   
  90.                 $newpage = $j+1;   
  91.                 if ($this->_cur_page == $j+1) {   
  92.                     $text .= ‘<b>[‘.($j+1).‘]</b>’;   
  93.                 } else {   
  94.                     $text .= ‘<a href=?pager=’.$newpage.‘>[‘.($j+1).‘]</a>’;   
  95.                 }   
  96.             }               
  97.             if ($this->_cur_page < $this->pages){   
  98.                 $next = $this->_cur_page+1;   
  99.                 $text .= ‘<a title=下一页 href=?pager=’.$next.‘>[>]</a>’;   
  100.             }   
  101.             if ($setpage < $this->_total) {   
  102.                 $nextpre = $setpage*($this->pernum+1);   
  103.                 if($nextpre<$this->pages)   
  104.                 $text .= ‘<a title=下一列 href=?pager=’.$nextpre.‘>[>>]</a>’;   
  105.             }   
  106.             if ($this->_cur_page < $this->pages) {   
  107.                 $text .= ‘..<a title=最后一页 href=?pager=’.$this->pages.‘>[‘.$this->pages.‘]</a>’;   
  108.             }   
  109.          }   
  110.             return $text;   
  111.          }   
  112.     }   
  113. //$conn,$tpl 全局变量 传入 $table是数据表 $where 是条件语句 $order 是ADSC之类的,$pager_size是每页显示数,$pager是当前页   
  114. //返回后在摸板里面可以直接使用    
  115. <{section name=sec loop=$show}>  <{/section}>   
  116. 数字标签用<{$numlink}>   
  117.     class my_Pager extends show_Pager   
  118.     {   
  119.         function __construct($table,$where,$order,$pager_size,$pager)   
  120.         {   
  121.          global $conn;   
  122.          global $tpl;   
  123.          $sql="Select * FROM `$table` $where order by $order desc";   
  124.          $nums=$conn->Execute($sql)->RecordCount();   
  125.          $pager=new show_Pager($nums,$pager_size,$pager);   
  126.          $show=$conn->SelectLimit($sql,$pager_size,$pager->_offset())->GetAll();   
  127.          $tpl->assign("numlink",$pager->num_link());//数字标签   
  128.          $tpl->assign("show",$show);//显示帖子   
  129.         }   
  130.     }   
  131. ?>