最近PHP又爆出漏洞:
‘当 PHP 以 CGI 模式运行时 (如 Apache 的 mod_cgid), php-cgi 会接受处理一個查询字符串作为命令行参数以开启某些功能
如 -s, -d 或 -c 传递给 php-cgi, 此处存在的漏洞可以允许攻击者查看源码或进行任意代码执行'
然后PHP 开发者向 PHP 5.3.12 和 5.4.2 发布了补丁,但很快被发现补 丁并未能真的修补该漏洞。现在PHP已经发布了PHP 5.4.3和5.3.13来解决这个漏洞
那么怎么查看PHP的运行模式呢
可以直接使用phpinfo()函数来进行查看
或者使用php_sapi_name()函数来查看。
一般情况下,在apache配置文件中使用 LoadModule 的方式都是mod_php方式运行的PHP
下面说明一下这两种运行方式的区别
以CGI方式运行PHP,意味着apache需要知道PHP执行文件的位置,然后apache才能运行PHP,当我们浏览一个页面时,apache会去调用php可执行文件来解析,这时PHP需要读取配置文件(php.ini),加载配置文件中启用的所有扩展模块,然后开始解析php脚本,每次浏览页面都要重复上面的动作(读取配置文件->加载扩展模块->解析脚本)。
以mod_php模式运行PHP,意味着php是作为apache的一个模块来启动的,因此只有在apache启动的时候会读取php.ini配置文件并加载扩展模块,在apache运行期间是不会再去读取和加载扩展模块的,(这也是为什么当我们以这种模式运行PHP时每次修改php.ini的配置信息都需要重启apache来使配置生效)
显然使用mod_php的方式运行PHP效率更高,因为配置文件和扩展模块只会加载一次。因此我们应该优先使用这种方式运行PHP,只有频繁的改动php.ini配置,而又不想重启apache时才使用CGI模式。