澳门新葡萄京官网注册 1

让你的PHP程序快马加鞭 PHP程序优化探密

PHP作为一种脚本语言,以方便易于学习受到众多Web开发人员的喜爱,然而PHP也秉承了脚本语言的多种缺陷,如:代码数量庞大、执行效率低等;因此优化是PHP开发人员必须掌握的一种技巧。
本期专题从多个角度较为全面细致地阐述了PHP加速的相关技术,包括测试技术,加速技术(压缩,缓存等),基本上都有附代码和范例。希望有助于读者全面了解PHP程序加速并在实际应用中选择合适的加速方案。
简介
今天,很少有人会怀疑时间是最宝贵的财富,尤其是商场上。程序速度越快,用户节约时间越多,这样你的程序就可以用更少的时间和服务器资源为用户服务,进而产生更多效益。
[

1、LAMP介绍

LAM(M)P:
L: linux
A: apache (httpd)
M: mysql, mariadb
M:memcached
P: php, perl, python
WEB资源类型:
静态资源:原始形式与响应内容一致
动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端,这个程序文件通常是一段代码,就像脚本语言一样,需要一个程序去处理这段代码,比如脚本语言需要/bin/bash程序去一行一行的处理才能识别,PHP程序代码需要PHP程序来处理,把这段代码转化为静态资源。
Web相关语言
客户端技术:javascript,html
服务器端技术:php, jsp,python

ASP、JSP、PHP 三种技术比较

目前,最常用的三种动态网页语言有ASP(Active Server Pages),JSP(JavaServer
Pages),PHP (Hypertext Preprocessor)。
简 介 :
  ASP全名Active Server
Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。ASP采用脚本语言VBScript(Java
script)作为自己的开发语言。
 
 PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法,
并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。它支持目前绝大多数数据库。还有一点,PHP是完全免费的,不用花钱,你可以从
PHP官方站点(http:
//www.php.net)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
  
JSP是Sun公司推出的新一代网站开发语言,Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和Java
Applet之外,又有新的硕果,就是JSP,Java Server
Page。JSP可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。
澳门新葡萄京官网注册 ,  三者都提供在
HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但JSP代码被编译成
Servlet并由Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。在ASP
、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的
HTML页面只依赖于Web服务器,而ASP
、PHP、JSP页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。ASP
、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。

2、CGI

CGI:Common Gateway Interface
可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准,http程序要想和PHP程序连接,之间就需要一个接口就是CGI,解决不同协议之间的通讯。
程序=指令+数据
指令:代码文件
数据:数据存储系统、文件
请求流程:
Client –(http协议) –> httpd–(cgi) –> application server (php)
–> mysql
php: 脚本编程语言、嵌入到html中的嵌入式web程序语言
基于zend编译成opcode(二进制格式的字节码,重复运行,可省略编译环境)

方法/步骤

  • ASP:

    1. 使用VBScript 、
      JScript等简单易懂的脚本语言,结合HTML代码,即可快速地完成网站的应用程序。
    2. 无须compile编译,容易编写,可在服务器端直接执行。
    3. 使用普通的文本编辑器,如Windows的记事本,即可进行编辑设计。
    4. 与浏览器无关(Browser Independence),
      客户端只要使用可执行HTML码的浏览器,即可浏览Active Server
      Pages所设计的网页内容。Active ServerPages 所使用的脚本语言(VBScript

      Jscript)均在WEB服务器端执行,客户端的浏览器不需要能够执行这些脚本语言。
      5.Active Server Pages能与任何ActiveX scripting语言兼容。除了可使用VB
      Script或JScript语言来设计外,还通过plug-in的方式,使用由第三方所提供的其它脚本语言,譬如REXX
      、Perl 、Tcl等。脚本引擎是处理脚本程序的COM(Component Object Model)
      对象。
    5. 可使用服务器端的脚本来产生客户端的脚本。
    6. ActiveX Server Components(ActiveX 服务器组件
      )具有无限可扩充性。可以使用Visual Basic 、Java 、Visual C++
      、COBOL等程序设计语言来编写你所需要的ActiveX Server Component 。
  • PHP:
    1•数据库连接
    PHP
    可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的群组合。你还可以自己编写外围的函数去间接存取数据库。通过这样的途径当你更换
    使用的数据库时,可以轻松地修改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。但PHP提供的数据库接口支持彼此不
    统一,比如对Oracle,
    MySQL,Sybase的接口,彼此都不一样。这也是PHP的一个弱点。

  • JSP:
    1•将内容的产生和显示进行分离
    使
    用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来产生页面上的动态内容。产生内容的
    逻辑被封装在标识和JavaBeans群组件中,并且捆绑在小脚本中,所有的脚本在服务器端执行。如果核心逻辑被封装在标识和Beans中,那么其它人,
    如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的产生。在服务器端,JSP引擎解释JSP标识,产生所请求的内容(例如,通过存
    取JavaBeans群组件,使用JDBC技术存取数据库),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,
    而又保证任何基于HTML的Web浏览器的完全可用性。
    2•强调可重用的群组件
    绝大多数JSP页面依赖于可重用
    且跨平台的组件(如:JavaBeans或者Enterprise
    JavaBeans)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者用户团体所
    使用。基于组件的方法加速了总体开发过程,并且使得各种群组织在他们现有的技能和优化结果的开发努力中得到平衡。

  • 3•采用标识简化页面开发

     

    Web 页面开发人员不会都是熟悉脚本语言的程序设计人员。JavaServer
    Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容产生所需要的。标准的JSP标识能够存取和实例化
    JavaBeans组件,设定或者检索群组件属性,下载Applet,以及执行用其它方法更难于编码和耗时的功能。
    通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其它人员可以为常用功能建立自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。
    JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及Java
    2EE的一个成员,JSP技术能够支持高度复杂的基于Web的应用。
    由于JSP页面的内置脚本语言是基于Java程序设计语言的,而且所有的JSP页面都被编译成为Java
    Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。
    作为Java平台的一部分,JSP拥有Java程序设计语言“一次编写,各处执行”的特点。随着越来越多的供货商将JSP支持加入到他们的产品中,您可以使用自己所选择的服务器和工具,修改工具或服务器并不影响目前的应用。

     

  • 应用范围
    ASP
    是Microsoft开发的动态网页语言,也继承了微软产品的一贯传统,只能执行于微软的服务器产品,IIS(Internet
    Information Server) (windows NT)和PWS(Personal Web Server)(windows
    98)上。Unix下也有ChiliSoft的组件来支持ASP,但是ASP本身的功能有限,必须通过ASP+COM的群组合来扩充,Unix下的COM
    实现起来非常困难。
    PHP3可在Windows,Unix,Linux的Web服务器上正常执行,还支持IIS,Apache等一般的Web服务器,用户更换平台时,无需变换PHP3代码,可即拿即用。
    JSP 同PHP3类似,几乎可以执行于所有平台。如Win
    NT,Linux,Unix。在NT下IIS通过一个外加服务器,例如JRUN或者ServletExec,就能支持JSP。知名的Web服务器
    Apache已经能够支持JSP。由于Apache广泛应用在NT、Unix和Linux上,因此JSP有更广泛的执行平台。虽然现在NT操作系统占了很
    大的市场份额,但是在服务器方面Unix的优势仍然很大,而新崛起的Linux更是来势不小。从一个平台移植到另外一个平台,JSP和JavaBean甚
    至不用重新编译,因为Java字节码都是标准的与平台无关的。

  • 性能比较
    有人做过试验,对这三种语言分别做回圈性能测试及存取Oracle数据库测试。
    在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而ASP、PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒和84秒。(参考PHPLIB)。
    数据库测试中,三者分别对 Oracle 8 进行 1000 次
    Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒,ASP则
    需要 73 秒。

  • 前景分析   
    目前在国内PHP与ASP应用最为广泛。而JSP由于是一种较新的技术,国内采用的较少。但在国外,JSP已经是比较流行的一种技术,尤其是电子商务类的网站,多采用JSP。

    用PHP的网站如新浪网(sina)、中国人(Chinaren)等,但由于PHP本身存在的一些缺点,使得它不适合应用于大型电子商务站点,而更适合一
    些小型的商业站点。首先,PHP缺乏规模支持。其次,缺乏多层结构支持。对于大负荷站点,解决方法只有一个:分布计算。数据库、应用逻辑层、表示逻辑层彼
    此分开,而且同层也可以根据流量分开,群组成二维数组。而PHP则缺乏这种支持。还有上面提到过的一点,PHP提供的数据库接口支持不统一,这就使得它不
    适合运用在电子商务中。
    ASP和JSP则没有以上缺陷,ASP可以通过Microsoft
    Windowsd的COM/DCOM获得ActiveX规模支持,通过DCOM和Transcation
    Server获得结构支持;JSP可以通过SUN Java的Java
    Class和EJB获得规模支持,通过EJB/CORBA以及众多厂商的Application
    Server获得结构支持。
    三者中,JSP应
    该是未来发展的趋势。世界上一些大的电子商务解决方案提供商都采用JSP/Servlet。比较出名的如IBM的E-business,它的核心是采用
    JSP/Servlet的Web
    Sphere。它们都是通过CGI来提供支持的。但去年10月后它推出了Enfinity,一个采用JSP/Servlet的电子商务
    Application Server,而且声言不再开发传统软件。
    总之,ASP,PHP,JSP三者都有相当数量的支持者,由此也可以看出三者各有所长。正在学习或使用动态页面的朋友可根据三者的特点选择一种适合自己的语言。

    END

3、LAMP工作原理

澳门新葡萄京官网注册 1

Paste_Image.png

4、PHP简介

官网:http://www.php.net/
PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用
PHP Zend Engine
Zend Engine是开源的、PHP脚本语言的解释,Zend
Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP代码并将其转换为称作Zend
opcode的二进制格式(类似Java的字节码),并将其存储于内存中;第二阶段是使用Zend
Engine去执行这些转换后的Opcode。

5、PHP配置和设置

  • 配置
    php:脚本语言解释器

配置文件:/etc/php.ini, /etc/php.d/*.ini
配置文件在php解释器启动时被读取
[root@centos6 html]#rpm -qf /etc/php.ini  ---php的配置文件来源于下面的rpm包,在yum安装php包时会因为依赖关系自动安装这个包
php-common-5.3.3-49.el6.x86_64

对配置文件的修改生效方法

Modules:重启httpd服务    
FastCGI:重启php-fpm服务
PHP的两种工作模式,一种是做为httpd服务的一个小的模块和httpd服务一起启动,另外一种工作模式就是做为一个独立的服务,也会监听端口

/etc/php.ini配置文件格式:

[foo]:Section Header
directive = value
注释符:较新的版本中,已经完全使用;进行注释
#:纯粹的注释信息
;:用于注释可启用的directive,如果把;去掉可以启动后面的内容
  • 设置

max_execution_time= 30 最长执行时间30s,php程序在后台运行的最长时间,避免PHP程序长时间不用占用cpu
memory_limit 128M最大占用内存。 生产不够,可调大
display_errors off 展示错误信息,调试使用,不要打开,否则可能暴露重要信息,比如客户端访问网站的时候,如果服务器发生错误,可能在客户端显示暴露一些重要信息
display_startup_errors off 展示开始的启动错误信息,建议关闭
post_max_size 8M 最大上传数据大小,不管是什么格式,可能是文件也可能是二进制的一些数据等,生产可能临时要调大,比下面项要大
upload_max_filesize 2M 最大上传文件,生产可能要调大
max_file_uploads = 20 同时上传最多文件数
date.timezone =Asia/Shanghai 指定时区
short_open_tag=on 开启短标签,是一种新的php编程格式如<? phpinfo();?>

6、PHP代码

php程序来源于php包

yum install php ---这种方法安装php程序,是把PHP程序做为httpd程序的一个小模块,也就是PHP程序的第一种工作模式
[root@centos6 html]#rpm -ql php
/etc/httpd/conf.d/php.conf    ---成为httpd服务的一个配置文件,这个配置文件中规定了加载这个模块,及php程序的主目录网页文件的格式index.php,也就是在httpd服务的主目录中如果创建了一个这样的文件,访问网站时会自动访问这个页面
/usr/lib64/httpd/modules/libphp5.so   ---php程序做为httpd程序的一个小模块
/var/lib/php/session
/var/www/icons/php.gif

php代码的格式
格式1

[root@centos6 html]#vim a.php ---此种格式为html标签里面嵌入PHP程序
<h1>
<?php echo "Hello world!" ?>
</h1>
[root@centos6 html]#service httpd restart 
测试:http://192.168.74.128/a.php

格式2

[root@centos6 html]#vim b.php  ---此种格式为php代码中嵌入html语言
<?php
echo "<h1>Hello world!php2</h1>"
?>
测试:http://192.168.74.128/b.php

两种格式中第一种比较常用,先是前段的html开发人员写好html标签后,后端的PHP开发人员再将php代码写到预留的php语句块中
php代码测试,可以显示时间和php的版本信息

[root@centos6 html]#vim c.php
<?php
echo date("Y/m/d h:i:s");
phpinfo();
?>
vim /etc/php.ini  ---修改php的配置文件中的时区
date.timezone = Asia/Shanghai
service httpd restart
http://192.168.74.128/c.php

修改php默认主站点的网页文件

方法一
vim /etc/httpd/conf/httpd.conf   ---要在httpd的配置文件里修改
DirectoryIndex index.php index.html index.html.var
[root@centos6 html]#ls
a.php  b.jpg  b.php  index.html  index.php
http://192.168.74.128/  
方法二
[root@centos6 html]#rm -f index.html 
[root@centos6 html]#vim /etc/httpd/conf.d/php.conf    ----或者修改php的配置文件
DirectoryIndex index.php   --默认这一行是有的
http://192.168.74.128/    ---这样访问时就会寻找默认的主网页文件

7、php连接到mysql数据库

  • 使用mysql扩展连接数据库

1、yum install php-mysql   ---安装php-mysql包
[root@centos6 html]#rpm -ql php-mysql   ---我们发现mysql做为php的一个模块连接到数据库,有三种模块方式mysql、mysqli、pdo_mysql
/etc/php.d/mysql.ini
/etc/php.d/mysqli.ini
/etc/php.d/pdo_mysql.ini
/usr/lib64/php/modules/mysql.so
/usr/lib64/php/modules/mysqli.so
/usr/lib64/php/modules/pdo_mysql.so
2、在另外一台主机上(192.168.74.132)创建一个mysql数据库,创建一个zhangdb的数据库和tom@192.168.74.%的一个用户
连接数据库的测试代码
vim /var/www/html/index.php 
<h1>    ----html标签,表示PHP代码镶嵌在html里面。html是一种文本格式,这种格式会使客户端看到的字体变大并且加粗,变的美观,不加这种格式字体就很小
<?php
$conn = mysql_connect('192.168.74.132','tom','centos');
if ($conn)
echo "OK";
else
echo "Failure";
mysql_close();
?>
</h1>
测试:http://192.168.74.128/
  • php使用mysqli扩展连接数据库的测试代码

前两步同上
<h1> 
vim /var/www/html/index.php 
<?php
$mysqli=new mysqli("192.168.74.132","tom","centos");
if(mysqli_connect_errno()){
echo "连接数据库失败!";
$mysqli=null;
exit;
}
echo "连接数据库成功!";
$mysqli->close();
?>
</h1>

8、常见LAMP应用

PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库
WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把WordPress当作一个内容管理系统(CMS)来使用
PHPWind:2003年发布了PHPWind的前身版本ofstar,并发展成为包含BBS、CMS、博客、SNS等一系列程序的通用型建站软件,
于2008年加入阿里巴巴集团
Crossday Discuz!
Board(简称Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议
ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。2006年6月,ECShop推出第一个版本1.0

9、布署phpMyadmin来管理mysql数据库

1、安装各种,并启动服务
yum -y install httpd mysql-server php php-mysql
service httpd start 
service mysqld start 
mysql_secure_installation   ---初始化mysql,设置用户和密码等
2、下载phpmyadmin源码并解压缩
下载:https://www.phpmyadmin.net/downloads/   ---注意下载的版本,rpm包安装的php为5.3版本,因此下载phpmyadmin时要支持php5.3这个版本才可以,这里下载的是phpMyAdmin-4.0.10.20-all-languages.zip 
cd /var/www/html/   ---注意一定要在httpd服务的主目录下解压缩
unzip /app/phpMyAdmin-4.0.10.20-all-languages.zip 
3、创建软连接
ln -s phpMyAdmin-4.0.10.20-all-languages/ pma  ---创建一个软连接,便于客户端访问时输入太长的目录名
4、创建phpmyadmin的配置文件
cd  /var/www/html/pma
cp config.sample.inc.php config.inc.php ---把一个例子复制一下
vim config.inc.php   ---修改一下这个例子制作成配置文件
$cfg['blowfish_secret'] = 'a8b7c6ddddsaadasfdfsfsf'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */  ---注意单用号里面要填充,默认是填充的,如果没有要填充,填充什么都可以
5、测试
yum -y install php-mbstring  ---要安装这个包才能访问网站,否则会报错
service httpd reload 
http://192.168.74.128/pma,然后输入初始化mysql过程中设置的用户名和密码就可以登录到网站,用web页面点鼠标的方式来管理mysql数据库了,我们可以创建一个wpdb数据库和一个wpadmin@'192.168.74.%'的用户并授权,然后在字符界面登录去验证一下网页方式管理mysql数据库是否可行。
[root@centos6 pma]#mysql -uwpadmin -p'123456' -h192.168.74.128  ---我们发现可以登录上,说明用web方式管理mysql数据库是成功的

10、布署wordpress搭建属于自己的博客

1、环境准备
准备两台主机a和b
在a上操作
yum install httpd php php-mysql
systemctl start httpd
在b上操作
yum install mariadb
systemctl start mariadb
2、在b上创建数据库及用户
mysql> create database wpdb;
mysql> grant all on wpdb.* to wpadmin@'192.168.74.%' indentified by '123456'
3、下载wordpress源
主页
在a上操作 cd /app tar xvf wordpress-4.8.1-zh_CN.tar.gz -C /var/www/html/ cd /var/www/html/ ln -s wordpress/ blog setfacl -R -m u:apache:rwx /var/www/html/wordpress/ ----打开下面的网站进行安装的时候会在/var/www/html/wordpress/ 目录下创建一个新的文件也就是wordpress的配置文件,所以要设置一个acl权限,当安装完毕后记得把权限删除 setfacl -R -b /var/www/html/wordpress/ ---清空acl权限 以上两步也可以不设置权限,直接编辑以下这个文件 cd /var/www/html/blog/ cp wp-config-sample.php wp-config.php vim wp-config.php define('DB_NAME', 'wpdb'); /** MySQL数据库用户名 */ define('DB_USER', 'wpadmin'); /** MySQL数据库密码 */ define('DB_PASSWORD', '123456'); /** MySQL主机 */ define('DB_HOST', '192.168.74.128'); 4、打开http://192.168.74.132/blog/进行页面安装,安装完毕后登陆就可以发现自己创建的博客了 5、在b上的操作 mysql -uwpadmin -p'123456' -h192.168.74.128 mysql> use wpdb; mysql> show tables; ---发现在数据库里在搭建博客的过程中已经自动创建了很多表,以后我们写的文章也会放到这里 +-----------------------+ | Tables_in_wpdb | +-----------------------+ | wp_commentmeta | | wp_comments | | wp_links | | wp_options | | wp_postmeta | | wp_posts | | wp_term_relationships | | wp_term_taxonomy | | wp_termmeta | | wp_terms | | wp_usermeta | | wp_users | +-----------------------+

总结:httpd服务,当用户访问的是静态页面的时候,httpd服务到磁盘上去访问资源,然后将数据直接返回给客户端,当访问的是动态页面,比如以.php结尾的文件时,因为这个文件里面都是php的代码,所以httpd程序把这个文件发给php程序来处理,将这些源代码转化成静态文件传给用户。并且php程序需要连接数据库。

发表评论

电子邮件地址不会被公开。 必填项已用*标注