Apache使用fcgid模块配置多个PHP版本共存

来源:互联网 发布:淘宝图片像素大小 编辑:程序博客网 时间:2024/05/22 05:52

因为涉及多个时期开发的项目维护,每个项目使用的PHP版本都不同,想要在本地开发并调试就非常麻烦了,必须得想办法同时使用多个PHP版本才行

于是总结了下面方法做个记录,apache 用的不多,只是本地开发测试环境用apache感觉简单方便点儿。
如果用 Nginx 来配置多个PHP版本的话应该会更简单了吧,修改下PHP的listen端口就好了。

一、根据 apache 版本下载对应的 mod_fcgid-2.3.9-win64-VC14.zip

https://www.apachelounge.com/download/

二、修改 httpd.conf 末尾 添加

LoadModule fcgid_module modules/mod_fcgid.soAddHandler fcgid-script .fcgi .phpFcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000FcgidMaxRequestsPerProcess 1000FcgidMaxProcesses 15FcgidIOTimeout  120FcgidIdleTimeout  120AddType application/x-httpd-php .php# 全局默认使用的PHP版本配置FcgidInitialEnv PHPRC "C:/ProgramFiles(x86)/php5.6"FcgidWrapper "C:/ProgramFiles(x86)/php5.6/php-cgi.exe" .php# 上传文件的最大尺寸 100MBFcgidMaxRequestLen 104857600

注意了,这里的 FcgidMaxRequestLen 很重要也很坑爹。

当你上传文件的时候发现总是出现500错误,而程序其实没有错误。
实际上是因为上传内容体积过大,即便修改了php.ini 中配置的上传参数也没有用的,必须修改这里才行,nginx下也会有类似的问题


三、对需要不同 PHP 版本的设置 httpd-vhosts.conf 添加下面代码

    FcgidInitialEnv PHPRC "C:/ProgramFiles(x86)/php7.0"    FcgidWrapper "C:/ProgramFiles(x86)/php7.0/php-cgi.exe" .php

注意:FcgidWrapper 中的路径使不能存在 空格 的,否则无法启动 Apache 了

Apache使用fcgid模块配置多个PHP版本共存

Apache使用fcgid模块配置多个PHP版本共存

因为历史原因我的软件都给装在了这个Program Files (x86)文件夹下面,又懒得换路径,为了兼容,我这里创建了文件夹的符号链接

命令格式:

mklink /d "新生成的符号链接文件夹名称和绝对路径" "源文件夹绝对路径"

举个栗子:
DOS 命令行模式下输入

mklink /d "c:\abc" "c:\a b c"

Apache使用fcgid模块配置多个PHP版本共存

修改 httpd-vhosts.conf 配置后的样子:

<VirtualHost *:80>    DocumentRoot "E:\Website\domain.com\www"    ServerName www.domain.com    ServerAlias *.domain.com    FcgidInitialEnv PHPRC "C:/ProgramFiles(x86)/php7.0"    FcgidWrapper "C:/ProgramFiles(x86)/php7.0/php-cgi.exe" .php</VirtualHost>

同样的,如果你还需要其他版本则直接下载对应版本的PHP后解压,然后指向那个目录就行了


四、.htaccess 的重定向配置

以前是这样用的

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

会出现错误,无法重定向到 index.php

No input file specified.

修改成下面这样就好了

RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

配置完成。。。

再补上一个多版本的测试结果吧。

我测试了三个版本,
php5.6(全局默认使用的版本), php7.0,php7.1

httpd-vhosts.conf 配置如下:

Listen 81Listen 82Listen 83<VirtualHost *:81>    DocumentRoot "E:\Website\local81"    ServerName 127.0.0.1</VirtualHost><VirtualHost *:82>    DocumentRoot "E:\Website\local82"    ServerName 127.0.0.1    FcgidInitialEnv PHPRC "C:/ProgramFiles(x86)/php7.0"    FcgidWrapper "C:/ProgramFiles(x86)/php7.0/php-cgi.exe" .php</VirtualHost><VirtualHost *:83>    DocumentRoot "E:\Website\local83"    ServerName 127.0.0.1    FcgidInitialEnv PHPRC "C:/ProgramFiles(x86)/php7.1"    FcgidWrapper "C:/ProgramFiles(x86)/php7.1/php-cgi.exe" .php</VirtualHost>

这里写图片描述

重启Apache后打开三个端口输出 phpinfo() 结果如下:

Apache使用fcgid模块配置多个PHP版本共存

可以看到三个端口输出的PHP版本都是不一样的表示配置成功了

0 0
原创粉丝点击