PHP顶层类

 更新时间:2016年11月25日 17:35  点击:1403

<?php
/**
* Object
* base class
*/
class Object
{
/* 是否输出调试信息 */
var $debug = true;

/**
* Object
* @deprecated 析构方法
*
* @return void
*/
function Object()
{
//用户是否从主页进入,做判定
if ( !defined( 'INDEX' ) )
{
die( "Hacking attempt" );
}
//echo 'create Object success!';
}

/**
* msg_die
* @deprecated 调试信息输出
* @param string
* @return void
*/
function msg_die( $info , $file , $line )
{
if( $this->debug )
{
$format = "There is happen error information: %s .".
" the file name: %s , on line : %s . ";
printf( $format , $info , $file , $line );
$error = debug_backtrace();
print_r ( $error[0] );
}
}

/**
* setDebug
* @deprecated 设置是否输出调试信息
* @param boolean true or false
* @return void
*/
function setDebug( $bool )
{
$this->debug = is_bool( $bool ) ? $bool : false ;
}

/**
* getDebug * @deprecated 查看是否打开调试信息
* @param void
* @return boolean
*/
function getDebug()
{
return $this->debug;
}
}
?>

chdir : 改变目录。
dir : 目录类别类。
closedir : 关闭目录 handle。
opendir : 打开目录 handle。
readdir : 读取目录 handle。
rewinddir : 重设目录 handle。

chdir
改变目录。
语法: int chdir(string directory);
返回值: 整数
函数种类: 文件存取
内容说明 本函数用来改变目前 PHP 执行的目录到新的 directory 目录中。若无法改变则返回 false,成功则返回 true。

dir
目录类别类。
语法: new dir(string directory);
返回值: 类
函数种类: 文件存取
内容说明 这是一个类似面向对象的类别类,用来读取目录。当目录参数 directory 打开之后,有二个属性可用:handle 属性就像其它非类的函数所用的 readdir()、rewinddir() 及 closedir();path 属性则配置打开目录后的路径参数。本类有三个方法 (method):read、rewind 与 close。

使用范例
<?
$d = dir("/etc");
echo "Handle: ".$d->handle."<br>n";
echo "Path: ".$d->path."<br>n";
while($entry=$d->read()) {
echo $entry."<br>n";
}
$d->close();
?>

closedir
关闭目录 handle。
语法: void closedir(int dir_handle);
返回值: 无
函数种类: 文件存取
内容说明
本函数用来关闭目录资料流的 dir_handle。这个 dir_handle 参数所操作的目录必须要 opendir() 打开的方可使用。

opendir
打开目录 handle。
语法: int opendir(string path);
返回值: 整数
函数种类: 文件存取
内容说明
本函数用来打开目录资料流。返回的整数是可供其它目录函数操作的 handle。

readdir
读取目录 handle。
语法: string readdir(int dir_handle);
返回值: 字符串
函数种类: 文件存取
内容说明 本函数用来读取目录。返回目录中的文件名称,读取不照任何非凡的顺序。
使用范例 本例列出目前目录的所有文件
<?php
$handle=opendir('.');
echo "目录 handle: $handle ";
echo "文件: ";
while ($file = readdir($handle)) {
echo "$file ";
}
closedir($handle);
?>

rewinddir
重设目录 handle。
语法: void rewinddir(int dir_handle);
返回值: 无
函数种类: 文件存取
内容说明 本函数用来重设目录资料流到开始处。

  在页面上显示大量数据,是WEB项目中很常见的一个作法,但限于屏幕的大小,为了便于用户阅读,我们通常需要将数据分页显示,所以分页功能是大部份项目不可缺少的。PEAR::Pager是一个功能强大的分页类,使用非常方便。

  系统需求:PHP4.3.* /PHP5,PEAR::Pager

  PEAR::Pager有两种分页显示模式,一是Jumping,二是Sliding。两者有什么区别,我们来看两个例子:

Jumping.php


<?php

require_once 'Pager/Pager.php';

$params = array(
'mode' => 'Jumping',
'perPage' => 3,
'delta' => 5,
'itemData' => array('a','b','c','d','e','z','ty','xc','fg','fg','jk','hj','ty','xc','e','z','ty','xc','fg','fg','jk','hj','ty','xc')
);

echo "<BR>当前分页模式:".$params['mode'];
echo "<BR>每页显示数据条数:".$params['perPage'];
echo "<BR>显示页数:".$params['delta'];
echo "<BR>具体数据数组:";
print_r($params['itemData']);


$pager = & Pager::factory($params);
$data = $pager->getPageData();
$links = $pager->getLinks();

echo "<P>最后效果:";
echo $links['all'];
echo $pager->linkTags;

echo '<P>当前页的数据: ' ;
echo "<pre>";
print_r($data);
echo "</pre>";

echo "其它类方法得到的数据:<P>";
echo 'getCurrentPageID()...: ';
var_dump($pager->getCurrentPageID());
echo "<BR>";
echo 'getNextPageID()......: ';
var_dump($pager->getNextPageID());
echo "<BR>";
echo 'getPreviousPageID()..: ';
var_dump($pager->getPreviousPageID());
echo "<BR>";
echo 'numItems()...........: ';
var_dump($pager->numItems());
echo "<BR>";
echo 'numPages()...........: ';
var_dump($pager->numPages());
echo "<BR>";
echo 'isFirstPage()........: ';
var_dump($pager->isFirstPage());
echo "<BR>";
echo 'isLastPage().........: ';
var_dump($pager->isLastPage());
echo "<BR>";
echo 'isLastPageComplete().: ';

我使用的是全角,大家修改为半角
不是本人原创
再一些学习教程中大多有简单介绍

.NET版本


<%@Page Language="C#" Debug="true"%>
<%@Import namespace="System"%>
<%@Import namespace="System.Drawing"%>
<%@Import namespace="System.IO"%>
<%
string sReferer=Request.ServerVariables["HTTP_REFERER"];
string sLanguage,sBrowser,sSys;
if(Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"].IndexOf("zh-cn")>=0){
sLanguage="Chinese";
}
else
{
sLanguage=Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"];
}
string[] aUserAgent=Request.ServerVariables["HTTP_USER_AGENT"].Split(’;’);
if(aUserAgent.Length>2){
sBrowser=aUserAgent[1].Replace("MSIE","Internet Explorer").Trim();
if(sBrowser=="U"){
sBrowser="Mozilla";
}
sSys=aUserAgent[2].Replace(")","");
sSys=sSys.Replace("NT 5.2","2003");
sSys=sSys.Replace("NT 5.1","XP");
sSys=sSys.Replace("NT 5.0","2000");
sSys=sSys.Replace("9x","Me").Trim();
}
else
{
sBrowser="Unknown";
sSys="Unknown";
}
int nWidth=260,nHeight=90;
Bitmap image=new Bitmap(nWidth,nHeight);
Graphics g=Graphics.FromImage(image);
Stream imgData=new MemoryStream();
g.Clear(Color.Snow);
g.DrawRectangle(Pens.Black,0,0,nWidth-1,nHeight-1) ;
g.DrawString("Your IP : " Request.ServerVariables["REMOTE_ADDR"],new Font("Courier New", 9,FontStyle.Bold),new SolidBrush(Color.FromArgb(200, 14, 91)),6,6);
g.DrawString("Language : " sLanguage,new Font("Courier New", 9,FontStyle.Bold),new SolidBrush(Color.FromArgb(0, 0, 0)),6,26);
g.DrawString("Your OS : " sSys,new Font("Courier New", 9,FontStyle.Bold),new SolidBrush(Color.FromArgb(0,0,255)),6,46);
g.DrawString("Browser : " sBrowser,new Font("Courier New", 9,FontStyle.Bold),new SolidBrush(Color.FromArgb(0, 160, 0)),6,66);
g.Dispose();
Response.ContentType="image/gif";
image.Save(Response.OutputStream ,System.Drawing.Imaging.ImageFormat.Gif);
%>
PHP版本

1. 治理后台添加记录时,直接生成目标html页面,并且前台调用连接直接指向生成的html页面。这种方法程优点是程序效率最高。

服务器负荷轻,不过由于生成的是纯静态页面,一旦页面样式(模版及css=theme)上有所改动就必须重新生成所有的内容页。

所以实际使用中应用一般不是太多。更多的是使用js,ssi,xml/xsl等客户端手段,生成的静态文件中仅保存数据,不涉及样式,

这样能达到速度和维护性的平衡,不过相对前后台程序要复杂些(应用这种方法时,由于内容为纯静态,可以搭配单独编译的纯静态的apache使用。。效率和资源占用上比包含动态内容支持的要更佳)

====
补充:

a. 上面说的改动样式,要重新生成所有的内容页,可以通过:
>>>>在可以在每个生成的页面内嵌入一个<script src=XXX.php?id=xxx&template=red></script>来判定是否需要重新生成该页面。

>>>>apache 的ErrorDocument404 功能, 但是这里前台链接是指向html的,假如该html不存在, 会通过apache的文件不存在重定向到404处理程序的功能重新生成html

(注:httpd.conf加 ErrorDocument 404 /errprocess.php 指令), 利用这个功能可以解决修改网站样式的时候,要更新所有生成的html文件的问题,

将整个static文件夹删除即可。

b. 通过嵌入<script></script>js来调用php的方式,更改许多需要变化的地方(如点击率之类的)

  2. 前台访问链接指向php程序,php程序首先检查是否存在相应的静态文件。假如静态文件不存在。则生成并重定向至此文件,否则直接重定向。

这种方法实际使用中一般和apache的url_rewrite功能一起使用。将php的文件地址重显示为html的形式,有利于搜索引擎的检索。

这种方法在效率上略有损失,不过程序结构简单,便于调整,在访问量不是很大时使用很合适。

注重事项:

所有生成的html文件都集中放到一个文件夹, 其中还应该注重生成文件假如很多的话(如论坛),访问其中一个htm文件,将会变得很慢,

那么最好通过

>>>>按日期来分隔文件夹,如static/2004/11/18/0001.htm
>>>>对帖子id根据数据库中字段长度做str_pad:比方说id为123456,数据库中为int(11),则id处理为00000123456,考虑到linux下一般同一下文件到达四位数会有性能影响,对其做切割,最后路径为static/00/000/123/456.html

[!--infotagslink--]

相关文章

  • php svn操作类

    以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • PHP实现递归无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。 递归,简单的说就是一段程序代码的重复调用,当把...2015-10-23
  • C#类中static变量用法分析

    这篇文章主要介绍了C#类中static变量用法,实例分析了static变量使用技巧与相关注意事项,需要的朋友可以参考下...2020-06-25
  • mybatis-plus实体类主键策略有3种(小结)

    这篇文章主要介绍了mybatis-plus实体类主键策略有3种(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-27
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • ecshop商品无限级分类代码

    ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
  • PHP 一个完整的分页类(附源码)

    在php中要实现分页比起asp中要简单很多了,我们核心就是直接获取当前页面然后判断每页多少再到数据库中利用limit就可以实现分页查询了,下面我来详细介绍分页类实现程序...2016-11-25
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • 详解ES6实现类的私有变量的几种写法

    这篇文章主要介绍了详解ES6实现类的私有变量的几种写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-10
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • c#各种Timer类的区别与用法介绍

    System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。在必须更新用户界面的情况下,建议不要使用该计时器,因为它的回调不在用户界面线程上发生...2020-06-25
  • C#学习笔记整理_浅谈Math类的方法

    下面小编就为大家带来一篇C#学习笔记整理_浅谈Math类的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • ES5和ES6中类的区别总结

    这篇文章主要给大家介绍了ES5和ES6中类的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-21