• 3016阅读
  • 0回复

PHP及相关技术 [复制链接]

上一主题 下一主题
离线cai
 

只看楼主 倒序阅读 0楼 发表于: 2005-10-16
出自: http://phpu.blogchina.com/

  * 如何加速你的PHP程序
  * 数字格式化
  * 语法高亮显示库
  * 模板引擎HTML_Template_Xipe
  * PHP随机密码生成
  * 我用的PHP编辑工具
  * 随机生成图像验证码
  * 判断数字大小
  * 获取数字随机数
  * PHP无语

如何加速你的PHP程序
我一直认为PHP的运行速度是非常的理想的,尤其是Zend引擎的加速之后。但是PHP仍然有加速的可能,你知道吗?

所有的一切都始于如何优化PHP的编译
尝试使用针对CPU型号的特殊编译参数 -msse -mmmx -mfpmath=sse
在编译的时候添加 -03参数
编译的时候调节CPU的参数 -march -mcpu Use Caution
尽量只编译你需要的模块,避免无用的扩展加载
对于很少使用的扩展模块,应该编译成共享模式,便于在运行的时候动态加载
也许有些时候 --disable-all 会是你的好朋友
把PHP静态编译到Apache可以提速20%
# PHP
./configure --with-apache=/path/to/apache_source

# Apache
./configure --activate-module=src/modules/php4/libphp4.a
优化你的PHP配置文件
确认你的 register_globals 配置为disabled
禁用 magic_quotes_* 选项
关闭 expose_php
关闭 register_argc_argv
除非绝对需要不要启用 always_populate_raw_post_data
Apache服务器的优化配置
MaxSpareServers 使用高配置
MaxClients 设置为你的服务器可以承受的2/5
MaxRequestsPerChild 理想情况是0 (不限),但是实际上都设置为一个较的一个值
优化文件访问
DirectoryIndex 文件列表尽可能简短
无论如何禁止 .htaccess 文件的 AllowOverride none
使用 FollowSymLinks 简化文件访问处理
避免使用 mod_rewrite 或者更复杂的操作
如果日志非必须的话就禁用
如果必须使用日志,那么请记录到一个文件中去,并且在分析过后清除
消除昂贵的系统呼叫
不要开启 ExtendedStatus
在允许和禁止规则的时候使用IP而不要使用域名
不要启用 HostnameLookups
保持 ServerSignature 关闭
设置 KeepAlive 为较小的一个值
动态和静态的内容分离
提高硬盘性能参数
使用 output_buffering 优化PHP到Apache的交互
增加Apache的 SendBufferSize 大小
提高缓存执行
使用PHP代码缓存机制
Turck MMCache 停止开发
APC 较慢,优化不够
Zend Cache 优化性能好,但付费
ionCube PHP Accelerator 免费但不开源
如果可以使用Zlib压缩
减少输出数据
用CSS替换HTML
压缩HTML页面
使用Sessions管理
优化你的SQL指令
原文引自:http://talks.php.net/show/acc_php/


数字格式化
之前曾经一直使用自己定义的数字格式化方法,原来PHP一直有个数字格式化函数的,呵呵~
例如,echo number_format(285266237);
可以输出 285,266,237
另外如果需要格式化文件字节大小,下面的方法可以借鉴:
function byte_format($input, $dec=0)
{
$prefix_arr = array(" B", "K", "M", "G", "T");
$value = round($input, $dec);
$i=0;
while ($value>1024)
{
  $value /= 1024;
  $i++;
}
$return_str = round($value, $dec).$prefix_arr[$i];
return $return_str;
}
echo byte_format(285266237);
显示结果为 272M


语法高亮显示库

PHP_Beautifier 是一个自动对PHP源文件重新格式化和美化工具,前不久已经被Pear收录,新版本使用PHP5重写了,并且提供了命令行工具。
下载请访问:http://pear.php.net/package/PHP_Beautifier/
如果你仍然使用PHP4的话,可以在这里对你的代码格式化:
[ http://clbustos.dotgeek.org/demo/ ]

另外Pear提供有一款更为简洁的语法高亮显示库 Text_Highlighter,你可以创建自己的XML语法规则文件来应用到新的语法高亮显示,目前已经支持的XML规则文件有:CSS, diff, dtd, JavaScript, MySQL, PHP, Python, SQL 和 XML。有兴趣的不妨去看下。
http://pear.php.net/pepr/pepr-proposal-show.php?id=72

- 作者: liu21st 2005年01月2日, 星期日 12:56  回复(0) |  引用(0) 加入博采
模板引擎HTML_Template_Xipe

比Smarty模板系统更为出色,被称为非常强大的标记式模板系统。修改自另外一个简单而快速的模板引擎HTML_Template_Xipe,是第一个可以像ASP.Net或者Cold Fusion一样使用标记语言的模板。而且还有一套非常简单的目标集:

非常简单的API
能够比较方便的书写代码
可以使用WYSIWYG编辑器(Dreamweaver或者Mozzila编辑器)
支持命名空间
速度非常快
比其它模板引擎(例如Smarty)要小四倍
使用编译型模板技术,循环调用的时候比PHPLIB和IT要快很多倍
非常安全,所有变量默认都作为HTML
强大的多语言支持
完全动态支持,可以实时替换标记
该模板引擎可以独立使用,并不需要依赖Pear(只有当使用某些增强功能的时候需要)

其它一些特性:
{variable} 输出 $object->variable
{method()}输出 $object->method();
{foreach:var,key,value}完成PHP 的foreach循环
{if:variable} 以及{if:method()} 完成PHP的条件判断
{else:} 和 {end:} 结束if语句
用HTML_Template_Flexy_Element 标记代替了INPUT, TEXTAREA and SELECT 等HTML标记
使用FLEXY:IGNORE 和FLEXY:IGNOREONLY 保护HTML标记不被解析
FLEXY:START/FLEXY:STARTCHILDREN 定义模板开始和结束
更多的请参考手册
Pear的团队计划是要把该模板技术整合成后台技术
相关页面:http://pear.php.net/package/HTML_Template_Flexy
示范页面:http://cvs.php.net/cvs.php/pear/HTML_Template_Flexy/tests/


PHP随机密码生成

产生随机字串,可用来自动生成密码。
特点:
1. 可以指定密码包含数字或字符,默认为混和模式
2. 指定随意密码长度,默认长度为6位

代码如下:
#-------------------------------------------
# 产生随机字串,可用来自动生成密码
# 默认长度6位 字母和数字混合
# $format ALL NUMBER CHAR 字串组成格式
#-------------------------------------------
function randStr($len=6,$format='ALL') {
switch($format) {
case 'ALL':
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-@#~'; break;
case 'CHAR':
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-@#~'; break;
case 'NUMBER':
$chars='0123456789'; break;
default :
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-@#~';
break;
}
mt_srand((double)microtime()*1000000*getmypid());
$password="";
while(strlen($password)<$len)
  $password.=substr($chars,(mt_rand()%strlen($chars)),1);
return $password;
}


我用的PHP编辑工具
EditPlus是我在Windows下面开发PHP(应该说是基本上所有程序)的首选,从最早用来做网页、写JS,到ActionScript、 JSP、PHP基本上都用它,真的是一往情深。如果是Linux平台下面,我会选择BlueFish~

之所以会使用上面两款,主要原因都是定制和扩展性都很强,而且又轻量级(做网络开发的速率优先,呵呵~)。
EditPlus目前的版本还是2.12 网站:http://www.editplus.com/
不是因为没有更新,实在是功能方面挺全的了,并且各种类型的STX、ACP和CTL文件都在不断的添加。很方便扩展到其它语言的开发。

BlueFish目前的版本是0.13,我用它也是因为它和EditPlus的界面太相似了,而且功能也不错。
网站:http://bluefish.openoffice.nl


随机生成图像验证码
根据以前的验证码生成修改而来,需要GD库的支持
特点:
1 安全性较强,随机背景加随机像素点绘制
2 生成四位随机数字(可重定义)
3 验证码存入session,直接取值即可比较
4 可以带参数调用。(默认是54×22的png图像)
    t 图像格式 png gif jpeg 等
    w 图像宽度
    h 图像高度

调用方式如下:

<img src="verify.php?t=gif&w=60&h=25" border="0" alt="">

代码如下:
<?PHP
#----------------------------------------------
# 文   件: verify.php
# 功   能: 认证码显示
#       Liu21st,[email protected]
# 最后修改: 2004-05-07 10:57:30 Liu21st
#----------------------------------------------

$type=($_GET['t'])?($_GET['t']):'png';
$width=($_GET['w'])?($_GET['w']):54;
$height=($_GET['h'])?($_GET['h']):22;
session_start();
Header("Content-type: image/".$type);
srand((double)microtime()*1000000);

$randval = sprintf("%04d", rand(0,9999));
session_register('session_verify');
if ( is_array($_SESSION) ) {
$_SESSION['session_verify'] = $randval;
$session_verify =$_SESSION['session_verify'];
}
else {
$session_verify = $randval;
}

if ( $type!='gif' && function_exists('imagecreatetruecolor')) {
$im = @imagecreatetruecolor($width,$height);
}else {
$im = @imagecreate($width,$height);
}
$r = Array(225,255,255,223);
$g = Array(225,236,237,255);
$b = Array(225,236,166,125);

$key = rand(0,3);

$backColor = ImageColorAllocate($im, $r[$key],$g[$key],$b[$key]);//背景色(随机)
$borderColor = ImageColorAllocate($im, 0, 0, 0);//边框色
$pointColor = ImageColorAllocate($im, 0, 255, 255);//点颜色

@imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);
@imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor);
$stringColor = ImageColorAllocate($im, 255,51,153);
for($i=0;$i<=10;$i++){
$pointX = rand(2,$width-2);
$pointY = rand(2,$height-2);
@imagesetpixel($im, $pointX, $pointY, $pointColor);
}

@imagestring($im, 5, 8, 3, $randval, $stringColor);
$ImageFun='Image'.$type;
$ImageFun($im);
@ImageDestroy($im);

?>


判断数字大小

判断数字的大小是否在某个范围内,如果仅仅是判断是否为数字无需使用。

#----------------------------------------------------------
# 判断数字大小,无大小的判断可以用系统带的 is_numeric($str)
#----------------------------------------------------------
Function isNumber ($fNum, $fMin="", $fMax="") {
if ( eregi("^[0-9]+$", $fNum) ) {
  if ( "" == $fMax && "" == $fMin ) {
  Return True;
  } elseif ( "" == $fMin && $fNum <= $fMax ) {
  Return True;
  } elseif ( "" == $fMax && $fNum >= $fMin ) {
  Return True;
  } elseif ( $fNum >= $fMin && $fNum <= $fMax ) {
  Return True;
  } else {
  Return False;
  }
} else {
Return False;
}
}

获取数字随机数

之前用过的一些函数,最近会陆续做些整理。

获得最小和最大值之间随机数,位数不足补零

#-------------------------------------------
# 获得最小和最大值之间随机数,位数不足补零
#-------------------------------------------
Function getRandNumber ($fMin, $fMax) {
srand((double)microtime()*1000000);
$fLen = "%0".strlen($fMax)."d";
Return sprintf($fLen, rand($fMin,$fMax));
}

PHP无语

很有意思,开了这个『PHP语』博客,却感到一时无语。对Blog无语,对PHP无语。

在我离开PHP的日子里,变化真的很多~太多新生的事物让我觉得这个自由的编程国度依旧是多么的美化,虽然一直有人在谈论着PHP为什么令人失望。我想我的回来,还是来完成应有的使命,让这美丽的语言生存的更好。

我想,这是我的新丝路,因为PHP将不再无语!而且还要语出惊人~
快速回复
限100 字节
 
上一个 下一个