PHP程序加速探索之加速工具软件

 更新时间:2016年11月25日 16:16  点击:1646
接着我们要关注一下PHP加速的另一个领域—缓存工具软件。这类软件都是从优化PHP运行环境来提速的,不需要改变任何代码。我们可以大概地将它们称为“执行码优化/缓存工具”,你可以理解为它们用来实现比较底层的优化/缓存。
 
以下列出目前比较常用的此类工具,具体哪种效果最好,请用自己的服务器环境测试:
  (一) APC Alternative PHP Cache
  http://pecl.php.net/package-info.php?package=APC
  APC运行于Linux和FreeBSD,你需要自己编译安装。按照其开发人员的说法,在他们的测试环境下可以提高脚本速度50%-400%。并且APC是个开源项目,已经加入了PHP的PECL库,很值得一试。
  (二) Turck MMCache
  http://turck-mmcache.sourceforge.net/
  Turck MMCache似乎是此类软件中目前最受欢迎的一种,它开放源代码,完全免费。它将PHP代码预编译并缓存起来,同时也对PHP运行环境进行一定优化。按照其官方文档的说法,MMCache可以明显地减轻服务器的负载,并提高脚本执行速度1-10倍。
  MMCache与另一个知名的加速软件Zend Optimizer兼容,但注意必需先安装MMCache(php.ini中设置)。除了加快PHP程序的速度,MMCache还可以将PHP代码加密。
  Turck MMCache同时支持Linux和Win32平台。
  (三) PHPA the PHP Accelerator
  http://www.php-accelerator
  PHPA又是另一个流行的PHP加速软件。在其官方网站上有分别使用PHPA与APC、Zend Cache的PHP脚本执行测试对比,其表现略优于APC,略逊于Zend Cache。
  PHPA支持Linux, FreeBSD, OpenBSD, BSDi和Solaris系统.
  (四) Zend Performance Suite
  http://www.zend.com/
  Zend Performance Suite是老牌的PHP加速/优化软件,依托于PHP领域最知名的Zend公司。目前已经推出4.0版本,它可以为PHP应用提供程序加速,内容缓存,文件压缩,下载服务等,功能十分强大,获得好几个PHP杂志的推荐奖—但是不得不提起,它也很昂贵,目前的价格是1875美元。
  以上几种加速软件,希望读者按照服务器环境自行测试并选择其中最适用的,因为我没有办法提供一个普遍适用的测试标准来判断哪种方案是最有效的。综合起来看,我个人认为Turck MMCache是个值得推荐的选择,免费而且功能相当出色。
  PHP作为一种脚本语言,以方便易于学习受到众多Web开发人员的喜爱,然而PHP也秉承了脚本语言的多种缺陷,如:代码数量庞大、执行效率低等;因此优化是PHP开发人员必须掌握的一种技巧。
  本期专题从多个角度较为全面细致地阐述了PHP加速的相关技术,包括测试技术,加速技术(压缩,缓存等),基本上都有附代码和范例。希望有助于读者全面了解PHP程序加速并在实际应用中选择合适的加速方案。
  简介

  今天,很少有人会怀疑时间是最宝贵的财富,尤其是商场上。程序速度越快,用户节约时间越多,这样你的程序就可以用更少的时间和服务器资源为用户服务,进而产生更多效益。 >>>[
  相对于Java由简入繁的演变趋势,PHP忠于简单易学原味的坚持受到广大开发者的欢迎,近年来声势大涨,而简单就是力量,这句话套用于近日PHP异军突起,再适合也不过了。老实说,原本觉得它不会太厉害,看到它最近的成长和茁壮,直攻Java阵营输于经营之处,让人对它刮目相看。
 
  Netscape前CEO Marc Andressen在Zend/PHP大会上预言,简单易学的描述语言PHP将会比Java被更多人用于Web应用的开发上;再引用Cnet台湾报导的数据,全球大约有2200万个网站使用PHP,而且数量还在稳定增加中。
 
  为什么PHP会如此受欢迎呢?我想简单好用是最大原因。如果网站只是提供使用者搜寻资讯的入口,网际网路上有许多现成、免费的、容易拿到,且已经做好的网站软体,如行事历、网站管理、新闻、报名系统、电子报、天气预报等免费的应用模组供下载安装使用,如此好康的事情,何乐而不为?而且只要买一本书,装一装,简单的设定就有讨论区,不用写任何程式,这对没有程式经验的人来说是好的进入点,也符合中小企业低成本建置网站的需求。作为Java人士,PHP的窜起给了我三个启示:
  Web 开发:PHP夹缝中求生存之道
  这些网路应用软体Java做不到吗?PHP夹在JSP(JavaServer Page )和ASP(Active Server Page )中间,说实在的,应该一点生存的机会都没有,因为他们的难易度、观念和架构、程式语法这三样差异不大;如果从弹性的角度来看,ASP可以去呼叫COM 元件,JSP是呼叫Java Beans元件,从开发延展性和系统的扩充性来说,都比PHP好太多,软体应用空间也相对更广阔。
 
  当然,这些语言因为各有特长,都各自有发展,而PHP在众多网站开发工具市场中没有变得比较差,反而变得比较大,软体是免费虽然是主因之一,但我认为更重要的是,PHP社群很专心地开发动态网页技术,而且这个点作对了,而如果要学ASP就还要再学VB,学元件开发,Java领域除了JSP外,还可以作Severlet,作Severlet就会想说把EJB结合在一起,所以体系会越来越复杂,越复杂就筑起更高的学习门槛,如此一来,学习意愿低,人才少,成本相对较高,直接影响企业采用意愿。
 
  现在的软体世界不只是应用之争,也是平台的拉锯战;过去开发人员会比较哪种程式语言比较棒,组合语言、Cobol、PL1、Ada(人工智慧)、LSPER、C等语言陆续问世,到最后只剩下C语言能留下来,连Pscal都需要有Delphi撑下来才能存活;如果要问说受欢迎的程式语言要具备什么特色,这些特色还真难归纳,例如开发弹性、功能强大、限制少、容易开发、使用性高等,每个语言先天都有这些特色,如果这些条件是程式语言存亡的关键因素,我想上述语言应该都不会结束,但随著技术演进和环境的改变,不适用或不符开发者需求的语言将逐渐被淘汰。
PHP有很多与文件系统相关的函数,不仅可以帮助你打开文件,还可以显示目录内容、移动文件等。很多人甚至使用PHP写出了基于Web的文件管理器。
 
  首先需要提醒一些关于文件路径的东西:在Windows你可以在文件路径中使用斜线“/”或反斜线“”,而其他操作系统仅使用”/”。出于兼容性考虑,以下实例使用“/”的表示方法:
  下面的简单脚本显示了一个基本的目录列表。注释在代码中并解释了每一步:

<? /* 在变量 $dir_name中给出希望访问的目录完整路径*/
 $dir_name = /home/me/;
 /* 创建句柄,打开给定目录的结果*/
 $dir = opendir($dir_name);
 /* 启动一段文本添加到将要放置列表元素(文件名)的地方 */
 $file_list = <ul>;
 /* 使用while语句,读取所打开目录的所有元素。如果文件名既非“.”及“..”则在列表中输出文件名*/
 while ($file_name = readdir($dir)) {
  if (($file_name != .) && ($file_name != ..)) {
   $file_list .= <li>$file_name;
  }
 }
 /* 终结列表 */
 $file_list .= </ul>;
 /* 关闭打开的目录句柄并结束PHP代码段*/
 closedir($dir);
?>
<!-- Start your HTML -->
<HTML>
<HEAD>
 <TITLE>Directory Listing</TITLE>
</HEAD>
<BODY>
 <!-- Use PHP to print the name of the directory you read -->
 <P>Files in: <? echo $dir_name; ?></p>
 <!-- Use PHP to print the directory listing -->
 <? echo $file_list; ?>
</BODY>
</HTML>
  这时已经有了一个目录列表。需要记住,要读取目录或文件(马上你会见到)中的内容用户所在的PHP运行平台必须至少对目录或文件有read权限。
  以下例子为如何复制文件:

<? /* 将需要复制的文件路径放入变量$original,复制的目标路径放入变量$copied */
 $original = /home/me/mydatabasedump;
 $copied = /archive/mydatabasedumo_1010;
 /* 使用函数copy() 复制源文件至目的地,或以输出错误信息结束*/
 @copy($original, $copied) or die(Couldn't copy file.);
?>
  示例脚本是备份系统的第一步。当脚本运行时,出于安全考虑它先将数据库复制到不同地点。通过对crontab的修改,你可以在选定时间执行此文件而无需用户介入。
  假设系统上已有Lynx,你可以创建crontab入口以运行Lynx并访问文件。访问文件将运行脚本并创建复制文件。以下例子将在早晨5点运行脚本,然后关闭Lynx:
0 5 * * * [username] lynx -dump http://localhost/copyfile.php 1>/dev/null 2>&1
  如果你运行的是PHP的CGI版本,你可以跳过Lynx部分并参考二进制文件:
0 5 * * * [username] php /path/to/copyfile.php 1>/dev/null 2>&1
文件上传我们需要用到HTML里面表单的type=file类型,及其enctype属性。这是我们大家必须要用的。当然了PHP函数库当中的FILE函数库,字符串类型函数库,目录函数库及$_FILES[]的使用是我们必须要用到的。
 
  也许每一个站点都可能会对上传文件有许多的限制,这些限制会包括 文件类型,文件大小,扩展名,以及上传目录的存在与否,上传文件的存在与否,目录的可写性,可读性,上传文件的改名及怎样把文件从缓存当中复制到你所需要的目录当中。
  当然出错的预处理也是我们不容忽视的!如果再深一步的讨论我们还可以对文件的操作起用事件日志的记录。
  下面我们通过一段程序来实现这些功能:
  
  首先是我们预设的变量值,它包括文件大小,文件扩展名类型,MIMI类型,及是否删除的开关变量

$MAX_SIZE = 2000000;
$FILE_MIMES = array('image/jpeg','image/jpg','image/gif'
,'image/png','application/msword');
$FILE_EXTS = array('.zip','.jpg','.png','.gif');
$DELETABLE = true;

  下一部就是设置浏览器访问变量及目录访问变量:

$site_name = $_SERVER['HTTP_HOST'];
$url_dir = http://.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
$url_this = http://.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$upload_dir = files/;
$upload_url = $url_dir./files/;
$message =;

  建立上传目录并相应改变权限:

if (!is_dir(files)) {
 if (!mkdir($upload_dir))
  die (upload_files directory doesn't exist and creation failed);
 if (!chmod($upload_dir,0755))
  die (change permission to 755 failed.);
}

  用户请求的处理:

if ($_REQUEST[del] && $DELETABLE) {
 $resource = fopen(log.txt,a);
 fwrite($resource,date(Ymd h:i:s).DELETE - $_SERVER[REMOTE_ADDR].$_REQUEST[del]n);
 fclose($resource);
 if (strpos($_REQUEST[del],/.)>0); //possible hacking
 else if (strpos($_REQUEST[del],files/) === false); //possible hacking
 else if (substr($_REQUEST[del],0,6)==files/) {
[!--infotagslink--]

相关文章

  • Elasticsearch工具cerebro的安装与使用教程

    这篇文章主要介绍了Elasticsearch工具cerebro的安装与使用教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-08
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • 国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程

    明天就是国庆节了,最近看到好多好友换了国庆风的头像,感觉这个挺有意思,就找到了类似的源码研究了一番,并进行了改造(并非原创,只是进行了改造,只要想分享一下实现思路)。下面就来看看如何实现一键生成国庆风头像小工具。​...2021-10-01
  • 短视频(douyin)去水印工具的实现代码

    这篇文章主要介绍了市面上短视频(douyin)"去水印"的工具原来是这样实现的,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-30
  • Eclipse中安装反编译工具Fernflower的方法(Enhanced Class Decompiler)

    这篇文章主要介绍了Eclipse中安装反编译工具Fernflower的方法(Enhanced Class Decompiler),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-20
  • Vue组件文档生成工具库的方法

    本文主要介绍了Vue组件文档生成工具库的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-11
  • 时间戳与时间相互转换(php .net精确到毫秒)

    本文给大家分享的时间戳与时间相互转换(php .net精确到毫秒) ,感兴趣的朋友一起学习吧...2020-06-25
  • C#定时每天00点00分00秒自动重启软件

    这篇文章主要为大家详细介绍了C#定时每天00点00分00秒自动重启软件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-11-03
  • 介绍Android测试工具Espress及安装使用

    Espresso是一个API精确,简洁小巧,容易学习的针对APP的UI测试代码的小工具,可以用来测试Android开发,本文我们来介绍一下Espresso及Espresso的安装使用。 Espresso是...2016-09-20
  • 详解软件系统稳定性的三大秘密

    随着软件复杂性越来越高,稳定性的保障越来越难,随着服务规模越来越大,稳定性的重要性越来越高。工程师在设计和开发软件的时候,要坚持底板思维。...2021-05-20
  • 基于C++自动化编译工具的使用详解

    本篇文章是对C++中自动化编译工具的使用进行了详细的分析介绍,需要的朋友参考下...2020-04-25
  • 基于C# 写一个 Redis 数据同步小工具

    Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这篇文章主要介绍了用 C# 写一个 Redis 数据同步小工具,需要的朋友可以参考下...2020-06-25
  • 比较简单的虚拟主机管理软件MyIIS 1.0.0

    MyIIS 做了部分,程序只写了些函数(带数据库),具体调用各位写逻辑程序实现...2016-01-27
  • 支持正则表达式更名的命令行工具

    这篇文章主要介绍了支持正则表达式更名的命令行工具,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • Java jar打包工具使用方法步骤解析

    这篇文章主要介绍了Java jar打包工具使用方法步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-15
  • Javac/javap 自带工具简单使用讲解

    这篇文章主要介绍了Javac/javap 自带工具简单使用讲解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-12
  • 超详细的Android开发调试工具ADB命令及安装介绍

    这篇文章主要介绍了Android调试工具ADB安装使用技巧,非常详细,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家早日升值加薪...2021-09-09
  • 第一次接触JS require.js模块化工具

    第一次接触JS require.js模块化工具,本文为大家介绍了JS模块化工具require.js教程第一课认识require.js,编写require.js,感兴趣的小伙伴们可以参考一下...2016-04-19
  • 详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)

    这篇文章主要介绍了微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-21
  • Illustrator的3D工具制作三维轮廓教程

    今天小编在这里就来给Illustrator的这一款软件的使用者们来说一说3D工具制作三维轮廓的教程,各位想知道具体信息的使用者,那么下面就快来看看小编给大家带来的教程吧。...2016-09-14