2.2 Apache与PHP的结合
作为Web应用程序开发,Web服务器和后台脚本语言的兼容性也是十分重要的。PHP最初就是基于Apache开发的,所以它与Apache有良好的兼容性。Apache有两种方式可以运行PHP脚本,一种是模块方式,另外一种是CGI方式。两种方式各有自己的特点,下面详细地介绍两种运行方式以及它们之间的区别。
2.2.1 以模块方式运行PHP
模块方式是指把PHP解析器作为Apache自身的一部分来运行和解析脚本。模块方式的PHP一般为一个动态库文件,在Linux下是libphp5.so,而在Windows下则是php5apache2.dll。在Apache的配置文件httpd.conf中配置加载相应的动态库文件,然后运行Apache服务器程序便可以解析PHP脚本。详细的配置方法将在2.3节及以后的章节中介绍。
安全方面,在PHP以Apache的模块方式安装和运行时,它将拥有与Apache用户(一般是“nobody”用户)一样的权限,但是可以通过Apache认证机制、或者用LDAP和.htaccess等技术来设计自己的访问模型,从而避免此安全问题。
一个经常出现的安全性问题就是让Apache拥有root权限,或者通过其他途径赋予Apache更强大的功能。
注意:
如果将Apache用户的权限设置为 root将是一种极其危险的做法,而且很可能会危及整个Web服务器系统的安全。所以除非是Apache专家,否则决不能使用root权限来运行Apache。
2.2.2 以CGI方式运行PHP
CGI方式就是指把PHP解析器作为一个独立的程序来运行和解析脚本。这个独立的程序,在Linux下是二进制可执行程序php,而在Windows下则是php-cgi.exe。在Apache的配置文件httpd. conf中配置相应的PHP解析器,可使Apache在解析PHP脚本的时候找到解析器。详细的配置方法将在2.3节及以后的章节中介绍。
安全方面,在PHP使用CGI方式安装和运行时,Apache服务器对于某些可能的攻击是开放的。
注意:
不要把PHP解析器放到 cgi-bin目录,客户端有可能运行它并造成安全漏洞。
2.2.3 两种运行方式的比较
以模块方式和CGI方式在Apache中运行PHP,各有各的优缺点,但是就实用性来讲,模块方式更具有安全性与效率性,所以建议Web开发人员或者网站部署人员使用模块方式来运行PHP。关于这两种方式的详细比较请参见表2-1。
表2-1 PHP中模块与CGI比较表
在以CGI方式解析脚本的时候必须在代码中第一行加解析器的绝对路径,如#!C:\PHP5\php-cgi.exe。