再出江湖,Jpage分页php版发布

 更新时间:2016年11月25日 16:07  点击:1879

声明:本文同时发表于一搏IT社区、CSDN、昨夜风个人网站,欢迎任何网站/个人转载,但请保留声明信息和作者信息,多谢合作!

作者:靳英辉(昨夜风)
版本:Jpage v2.0 for php
发表:2008-12-02

______________________________________________________________


在先后推出针对Java、.Net2.0开发语言下的Jpage两版分页之后,随着一搏IT社区、abcbaby、加拿房产网、中国开源网的开发需求,以及新东方一搏PHP01班的盛大起航,对php下的Jpage分页需求,提上日程。

版本历史:
2007年10月,Jpage分页php版诞生,初步应用于几个项目中。
2007年11月,我和PHP01的学生们,一起对Jpage第一版进行了全面的测试和完善。
2008年12月,Jpage 2.0 php的诞生。

Jpage v2.0 for php

特点:
1、通用的数据封装。
只需包含mysql.php,解决所有增、删、改、查的问题。执行SQL语句、执行过程、返回数组结果、返架一行结果、返回一行一列,尽在其中。
对数据持装类,吸纳了微软的.NET数据层的思想,结合了实际开发需求,将大大提高开发效率。

2、只需一条查询语句。
使用简单、开发快捷、最优查询一直是Jpage系列分页的核心思想。只需一条语句,即支持普通查询、海量查询,并同时得到多种分页样式, 这就是Jpage分页。

3、优化小量查询和海量查询。
经Mysql5 260万条数据测试,Jpage分页执行飞快。明显优于网上其它分页以及基于PHP程序层结果集的分页。在Mysql中,Jpage分页采用了limit来分页,这延续了Jpage分页“需多少,取多少”基于数据库层面的分页思想。

4、内置三种页脚风格。
为了解决不同的显示需求,Jpage分页内置了三种页脚显示风格:
默认样式:适合一般企业需求。
简捷样式:适合窄页面显示需求。
数据样式:适合海量数据显示需求。
除了上述三种风格之外,开发者还可在footPage.php中自定义风格。


5、灵活的页脚样式控制。
你可以定义诸如:#page a{color:red}样式表文件,来得到不同显示效果。

6、与Jwork框架无缝集成。
作为Jwork框架的前身,Jpage分页,它不是一个在战斗。Jwork框架是软件开发的经验集、通用集、效率集。


对比:

一般分页/自定分页存在的问题:

1、网址传参的问题。
网上有些分页,包括我们自己写的分页,往往忽略了网址传参的问题。我们知道,分页的网址一般为:
list.php  list.php?page=2,

但当网址有参数时,
list.php?name=yiboit&id=20
一般分页则为:list.php?page=2
Jpage分页为:list.php?name=yibit&id=20&page=2

2、书写复杂、代码冗余、和数据层独立。
一般的分页,和数据层独立,并且和视图(页面)过于耦合,在使用上、开发上、运行效率上都是值得商榷的。
Jpage分页,已先后发布Java、.Net、PHP三版,基于同一思想,经过百万级项目测试、压力测试,尚未出现任何问题。
Jpage分页,把分页作为数据层一个功能,把显示层(分页样式)以配置文件独立出来,站在“松散耦合”的高度,让开发如此便捷。

3、基于结果集的分页或基于存储过程。
分页主要有两种方案,一种是基于结果集的指针,一种是基于数据端TOP N的思想。

 

 网上很多文章介绍优化php程序,是通过安装Zend Optimizer之类的加速软件实现的,但这种加速是有限的。本文主要从程序代码着手介绍一些优化手段。

1、程序的抽象层越多,各抽象层分离得越严格,程序效率越低。

最原始的应用于网页的php程序模式莫过于脚本嵌入模式,即仅仅在一个网页中需要动态处理或显示数据的地方通过加入标识符嵌入php脚本。一般来说这是php程序员最早学习的模式,它只有一个抽象层,就是网页,故本文称其为单层模式。

随着网站规模逐渐增大,程序员可能会发现单层模式的程序很难维护,当想对程序修改或扩充功能时,会发现代码非常混乱,感觉无从下手。于是模板类诞生了,它使一个网页由两个文件组成:一个php程序文件,一个html模板文件。常用的模板类有PHPLib库带的Template模板类,Smarty模板类等。由于加入了额外的处理程序(模板类),程序效率下降了。你若不信可自己测试一下。其实一般情况下,不用函数(最原始的编程方法)比用函数(面向过程)的效率高,而用函数的效率又比对象封装(面向对象)高。所以就算在编译语言中,需要高效率的地方会用C写而不用C++,例如FreeBSD操作系统的内核;而需要极端高效的地方还要用汇编写。

为了使程序可以适应多种数据库系统,或者方便随时转换数据库系统,常常还会用一个类把跟数据库打交道的函数封装起来,这样当转换数据库系统时只要把封装类换掉就行了,主程序不需要修改。这里又用了一个类,效率又打折扣了。

上述模板类的使用,使程序分成两个抽象层:程序层和表现层。而数据库类的使用又把程序层分为数据接口层和数据处理层。

项目越庞大,需要分离的抽象层就越多,这样使得分工清晰,方便管理,但是以牺牲程序执行效率为代价。

对于抽象层造成的效率下降,优化的方法有二:减小抽象层、优化抽象层之间的接口。一般地,不应该为了提高效率而盲目减小抽象层,这样会使得代码混乱、难于管理。但是不应该为小项目建立过多的抽象层,除非你有将来把它做得很大的计划。关于如何恰当分割抽象层,本文不作更深入讨论。

对于上文说的两个分层例子,优化抽象层之间的接口分别是模板类和数据库操作类。抽象层接口在程序中需要被频繁调用,以在不同层之间交换信息,所以层接口是很值得优化的。对于数据库接口类,可能仅仅是封装一些数据库函数,优化余地恐怕不大。对于模板类,很多时候是有较大优化余地的。一般地,模板模型越通用,模板类功能越强大,效率就越低,例如PHPLib库带的Template类就有极大的优化余地。而Smarty模板类比PHPLib的Template更复杂,我没有用过,据称有缓存机制,不知是否可以弥补其性能损耗。下面就来看看PHPLib的Template类有多少东西可以优化掉。

(1) 读入模板文件时,file函数效率低,改用get_file_content函数。

(2) 匹配子模板时,正则表达式替换函数preg_replace效率低,改用str_pos函数进行定位和用str_replace函数进行替换操作。此优化手段后文会详细分析。

(3) 模板模型通用性很强,能适应各种情况,但在具体细节的处理上,通用的方法效率可能很低。可以对模板模型作适当修改。我的做法是建一个相对通用的模板类,然后再派生出一个只适用于特定程序的模板类。在通用模板类的模板模型上可以作些优化(相对于PHPLib的Template),例如在处理二维数据表的时候用PHPLib的Template处理就比较复杂,需要多次调用类方法(本质上是函数调用),所以重写的时候可以把处理二维数据表的功能封装到一个高效率的方法中,直接避免方法的多次调用。

(4) 调试功能在小项目上不需要用,跟调试相关的代码全部去掉。

我在按上面4点重写了模板类之后,一个复杂页面的执行时间缩小了一个数量级(除模板外没有作其它优化)。

现在就优化你的程序的抽象层之间的接口,特别是当这些接口是使用现成的函数或类的时候。因为这些函数或类在设计时会为了适应普遍情况而牺牲一些效率,而且它们的作者也可能没有考虑效率问题。像如此著名的PHPLib的模板类的效率也不见得就高。

2、细节代码优化

(1) 上文模板类优化已提到的,正则表达式匹配比一般字符串匹配慢得多,尽可能用字符串匹配而不用正则表达式匹配。有时候虽然用正则表达式匹配使程序代码更简洁,而一般字符串匹配使代码更冗繁,但很多时候字符串匹配仍比正则表达式高效。

(2) 字符串替换函数str_replace和preg_replace都是可以接受数组参数的。有时候需要对字符串进行批量替换,则用数组参数比循环调用替换函数来得高效。例如下面的代码:

for ($i = 0; $i < $n; $i++) {
$str = str_replace($search[$i], $replace[$i], $str);
}

应该换成:

$str = str_replace($search, $replace,

以前每当一个 ZendStudio 的新版本发布时都会同时发布一个新版的 ZendStudioServer 组件,这个组件可以让我们很方便地进行远程调试。但是自从 Zend 发布了 ZendPlatform 以后他们就不再更新 ZendStudioServer 组件了。这就导致我们只能远程调试 PHP 5.1.x 的环境,而不能调试 PHP 5.2.x。要想调试 PHP 5.2.x 只能装一个庞大的 ZendPlatform。:(

因此我一直在找一个“轻量级”的解决方案。近日在逛 Zend.com 时发现了一个好东西:ZendDebugger-5.2.3-Windows-i386.zip,直觉告诉我,这就是我想要的。果不其然,今天试验成功!

下面就说一说我的试验步骤:

  1. 到这里下载 ZendDebugger-5.2.3-Windows-i386.zip,然后将其解压到某一目录,比如:C:Program FilesZend,这就会在该目录里面新建一个 ZendDebugger-5.2.3-Windows-i386 子目录,里面有 4_3_x_comp、4_4_x_comp、5_2_x_comp 等目录,将这些 x_y_z_comp 分别改为 php-x.y.z(比如将目录 5_2_x_comp 改为 php-5.2.x);
  2. 确保已经加载了 Zend Extension Manager,如果安装了 Zend Optimizer 则会自动安装 Zend Extension Manager,若没有安装请先安装 Zend Optimizer 。或者你可以把 Zend Optimizer 中 ZendExtensionManager.dll 给提取出来,然后手工在 php.ini 中添加一行:
    zend_extension_ts=”C:Program FilesZendZendOptimizerZendExtensionManager.dll”
    其中 ZendExtensionManager.dll 的位置请根据你的实际情况填写;
  3. 在 Web Server 的 php.ini 添加下面几行:
    zend_extension_manager.debug_server_ts="C:Program FilesZendZendDebugger-5.2.3-Windows-i386″(这个目录一定要和Zend Optimizer 在同一个目录要不然就无法加载)
    zend_debugger.expose_remotely=allowed_hosts
    zend_debugger.allow_hosts=127.0.0.1/32,192.168.1.0/24,192.168.1.0/24
    zend_debugger.allow_tunnel=127.0.0.1/32

    zend_extension_manager.debug_server_ts 的值请根据你的实际情况填写,就是 php-x.y.z 的父目录。

  4. 把 ZendDebugger-5.2.3-Windows-i386 目录下的 dummy.php 复制到你的 Web 站点根目录。

  5. 重启你的 Web Server,OK!

简单总结一下:Zend Studio 的远程调试是由 ZendStudioServer 组件(ZendDebuger.dll)提供的。本质上这是一个 Zend 扩展,因此你只要能把这个 Zend 扩展启用就可以了。只是 Zend 公司出品的 Zend 扩展只能由那个 Zend Extension Manager 负责加载,所以我们才需要做一些额外的步骤,否则只需简单地加一行 zend_extension_ts = xxxxxx 而已。

完。

后记:修改php.ini

[Zend]
zend_extension_manager.optimizer_ts="d:apmZendZendOptimizer-3.3.0libOptimizer-3.3.0"
zend_extension_ts="d:apmZendZendOptimizer-3.3.0libZendExtensionManager.dll"
zend_extension_manager.debug_server_ts="D:APMZen

<


2007-07-24的文章 转自http://www.111cn.net/13013/viewspace_12473.html

以下仅供参考,在中国社会环境错综复杂,不同级别的人拿得是相同工资很普遍.高薪关键是面试时的口才+经验+实力+运气+人际交往能力
很高兴各位很看到这篇文章,我希望能以这个架阶为平台,为我的PHPER朋友们更好了解自身成长的过程,包括技术阶段、人生规划和就业策略,从而帮助各位或是公司人事部找到合适自己的路子;本篇文章会继续完善,包括各级别的面试题案例解析,当然笔者由于年纪与经验各方面不足,故之能说是参考,因为现实因素很复杂.^_^

1.一段phper水平与待遇 ->初级工程师
Jiania->答:内容:不问专业,首先是位合格网民与玩家,看懂HTML,XHTML,DHTML,能写基础CSS,Javascrīpt,能自己搭配Windows平台(WAMP),懂得基础的SQL/mysql语句与phpmyadmin操作,懂得数据备份与恢复,能写简单的留言本,新闻系统.能看懂简单的PHP程序代码,并能做简单修改.对版本控制客户端软件有所了解;无工作经验.

此类人才策略:

这类人基本上大学刚毕业,不管是计算机专业,还是业余选手,在学校基本上没有学到多少知识,但是位合格的网民应是最基本了,这些人听老师讲过,自己看过一些入门书籍,懂得装操作系统(WAMP),基本优化,制做简单网页,或是复制他人代码,或是会使用其它CMS系统做点简单的企业网站,会使用FTP软件,对 B/S架构大致有点了解,有点基础的sql语句,如select,insert into,update,left join ,inner join等联合语句与数据的备份与恢复,但此类程序员一般对数据库的设计结构并无太多心得,例如数据类型的使用->时间上是用time类型,还是用int(10)类型在转化等等,此类程序员懂PHP基本语法知识,能看别人简单点代码复制到自己程序中使用.在javascrīpts懂得使用一些基本的JS语句.
在CSS+XHTML方面只有基本了解,并不懂得优化与其它高级使用,基本上编写出来的东西无法满足W3C标准.你也不可能要求他写出的PHP程序安全性过关,基本上对sql injection没有太多概念.^_^,带SQL程序可攻击性99.99%

为什么任何程序员必经的过程要懂html,js等基础呢?因为这是必经过程,在以后你可以不用管这些,交给专业网页充计师来处理,但学习之前你必需有基本的了解!

适合公司对象:中小型公司,不以网络开发为主,技术部只需1-2人就行的公司.

Jiania->答:待遇:800-1.5K 地区+运气 2K-.3k左右

以北京四环以内来讲,房租(1000)省点合租床位(300-500)+伙食(800)+交通(200)+手机(100),起点得2K-3K,不然没法混了.



2.二段phper水平与待遇 ->中/高级工程师 (中国式名片)
Jiania->答:内容:继承上面,较熟悉DIV+CSS结构设计,了解XML, 了解CGI标准,了解W3C标准;理解MV结构,懂得使用AJAX,了解TCP/IP协议,书写Javascrīpt,熟悉搭配Windows平台 (WAMP),LAMP平台环境搭配, 懂得CVS/SVN版本控制安装与使用,能看懂UML设计图,较好的书写习惯;懂得使用PEAR与一些开源类(Adodb, Jpgraph..);懂得Smarty等模板应用;熟悉MYSQL/SQL数据操作与结构优化,能独立设计数据结构,对PHP常用的命令,如数组操作, function编写,简单OO应用,能独立开发企业网站,能写普通的功能应用与原有系统上的扩展模块;英语基本阅读能力,一年左右开发经验;

Jiania->答:待遇:2.5K-3.5K 地区+运气 4k-5K左右 左右或是更高,看国企业,还是外企业,公司大小等因素.

以北京四环以内来讲,房租(1000起点)省点合租床位(300-500)++伙食(800)+交通(200)+手机(100)+谈恋爱(1000)+请客聚会(500起),
工资起点得4K-5K不然没法混了.



3.三段phper水平与待遇 样->资深工程师

Jiania ->答:内容:继承上面,有C语言或其它语言基础,能读懂PHP C 源代码, 懂得CGI标准,熟悉W3C标准;懂得MVC架构,了解与懂得使用SPL,能读懂主流CMS的源代码,能对其进行二次开发,良好OO架构与编写能力,参与或是有能力写出PEAR子功能包,读懂Zend Framework等开源框架并懂得使用,
<


滥用include
1.漏洞原因:
Include是编写PHP网站中最常用的函数,并且支持相对路径。有很多PHP脚本直接把某输入变量作为Include的参数,造成任意引用脚本、绝对路径泄露等漏洞。看以下代码:
...
$includepage=$_GET["includepage"];
include($includepage);
...
很明显,我们只需要提交不同的Includepage变量就可以获得想要的页面。如果提交一个不存在的页面,就可以使PHP脚本发生错误而泄露实际绝对路径(这个问题的解决办法在下面的文章有说明)。
2.漏洞解决:
这个漏洞的解决很简单,就是先判断页面是否存在再进行Include。或者更严格地,使用数组对可Include的文件作出规定。看以下代码:
$pagelist=array("test1.php","test2.php","test3.php"); //这里规定可进行include的文件
if(isset($_GET["includepage"])) //判断是否有$includepage
{
$includepage=$_GET["includepage"];
foreach($pagelist as $prepage)
{
if($includepage==$prepage) //检查文件是否在允许列表中
{
include($prepage);
$checkfind=true;
break;
}
}
if($checkfind==true){ unset($checkfind); }
else{ die("无效引用页!"); }
}
这样就可以很好地解决问题了。
小提示:有此问题的函数还有:require(),require_once(),include_once(),readfile()等,在编写的时候也要注意。
未对输入变量进行过滤
1.漏洞原因:
这个漏洞早在ASP中出现过,当时造成的注入漏洞不计其数。但由于PHP在当时的影响力较小,所以没有太多的人能够注意这点。对于PHP来说,这个漏洞的影响性比ASP更大,因为有比较多的PHP脚本使用到文本型数据库。当然也存在SQL语句的注入问题。举个比较经典的例子,首先是数据库的:
$id=$_GET["id"];
$query="SELECT * FROM my_table where id=''".$id."''"; //很经典的SQL注入漏洞
$result=mysql_query($query);
这里很明显我们可以用注入来获得数据库的其它内容了。这里就不再详细叙述,和ASP注入一样的,大家可以看看以前的黑防。然后我们看文本数据库的问题:
$text1=$_POST["text1"];
$text2=$_POST["text2"];
$text3=$_POST["text3"];
$fd=fopen("test.php","a");
fwrite($fd,"rn$text1&line;$text2&line;$text3");
fclose($fd);
文本的漏洞可以说是更加严重。倘若我们的提交的变量中插入一段很小的PHP代码,就可以另这个文本数据库test.php变成PHP后门。甚至插入上传代码,让我们可以上传一个完善的PHP后门。接着提升权限,服务器就是你的了。
2.漏洞解决:
这个漏洞的解决方法其实很简单,就是严格对全部提交的变量进行过滤。对一些敏感的字符进行替换。我们可以借助PHP提供的htmlspecialchars()函数来替换HTML的内容。这里给出一段例子:
//构造过滤函数 www.111cn.net
function flt_tags($text)
{
$badwords=array("操你妈","fuck"); //词汇过滤列表
$text=rtrim($text);
foreach($badwords as $badword) //这里进行词汇的过滤
{
if(stristr($text,$badword)==true){ die("错误:你提交的内容含有敏感字眼,请不要提交敏感内容
[!--infotagslink--]

相关文章

  • php KindEditor文章内分页的实例方法

    我们这里介绍php与KindEditor编辑器使用时如何利用KindEditor编辑器的分页功能实现文章内容分页,KindEditor编辑器在我们点击分页时会插入代码,我们只要以它为分切符,就...2016-11-25
  • 自己动手写的jquery分页控件(非常简单实用)

    最近接了一个项目,其中有需求要用到jquery分页控件,上网也找到了需要分页控件,各种写法各种用法,都是很复杂,最终决定自己动手写一个jquery分页控件,全当是练练手了。写的不好,还请见谅,本分页控件在chrome测试过,其他的兼容性...2015-10-30
  • 源码分析系列之json_encode()如何转化一个对象

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

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

    本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • vue.js 表格分页ajax 异步加载数据

    Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
  • 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
  • Springboot如何使用mybatis实现拦截SQL分页

    这篇文章主要介绍了Springboot使用mybatis实现拦截SQL分页,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-19
  • PHP 一个完整的分页类(附源码)

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

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • jquery实现的伪分页效果代码

    本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
  • AngularJS实现分页显示数据库信息

    这篇文章主要为大家详细介绍了AngularJS实现分页显示数据库信息效果的相关资料,感兴趣的小伙伴们可以参考一下...2016-07-06
  • 基于jquery实现表格无刷新分页

    这篇文章主要介绍了基于jquery实现表格无刷新分页,功能实现了前端排序功能,增加了前端搜索功能,感兴趣的小伙伴们可以参考一下...2016-01-08
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • vue实现页面打印自动分页的两种方法

    这篇文章主要为大家详细介绍了vue实现页面打印自动分页的两种方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-29
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15