说一下原由,有台aliyun服务器,上一年刚用的时候使用lnmp一键安装包,选择安装了apache(2.4)、mysql(5.6)、php(5.6)。php
最近想升级php版本,由于旧版php(5.6)我还要继续用,直接升级的话确定有些代码不兼容(例如composer下载来使用的类库)想多版本Php能够一块儿使用,我装的是lamp,问题来了,只有lnmp能够多版本,因此发生下面的事情html
因此目前状况是我要在apache配置多版本。上网努力地搜了一下,基本都是在nginx或者iis上配置多版本php,不符合个人需求。其实也找到一些在apache上配置多版本php的文章,按个人理解和操做没有一篇能完成的,多是我理解能力差或者技术菜吧。我是集合了多篇文章里的要点和折磨了一天慢慢理解出来,最后才完成apache上配置多版本php。技术上只是一个小学生,若是有错误的地方麻烦指出来,感激涕零。mysql
一、下载php7.3
由于下载很慢,使用kxsw瞬间搞掂
我是直接在 php官网 下载而后扔到服务器上的。nginx
固然也可使用命令sql
cd / wget https://www.php.net/distributions/php-7.3.20.tar.gz
二、解压apache
tar -xzvf php-7.3.20.tar.gz
三、配置一些编译前的参数segmentfault
cd php-7.3.20 ./configure '--prefix=/usr/local/php7.3' '--with-config-file-path=/usr/local/php7.3/etc' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-gd' '--with-iconv' '--with-zlib' '--enable-xml' '--enable-bcmath' '--enable-shmop' '--enable-sysvsem' '--enable-inline-optimization' '--enable-mbregex' '--enable-fpm' '--enable-mbstring' '--enable-ftp' '--enable-gd-native-ttf' '--with-openssl' '--enable-pcntl' '--enable-sockets' '--with-xmlrpc' '--enable-zip' '--enable-soap' '--with-pear' '--with-gettext' '--enable-session' '--with-mcrypt' '--with-curl' '--with-libzip=/usr/local/libzip-1.3.2' '--disable-fileinfo'
**--prefix=/usr/local/php7.3,等号后面的是你接下来安装的路径,按需填写。
--enable-fpm这个参数须要留意一下。是按照php-fpm方式安装。
对应的参数是--with-apxs2=/usr/local/apache/bin/apxs,等号前是使用模块的方式安装,等号后面是填写对应apache的路径。--enable-fpm和--with-apxs2=PATH模式,二者只能取其一,参数填写了--enable-fpm就不要--with-apxs2,后者直接安装在了apache中,会随着apache的启动而启动。**服务器
**提早说一下后面编译里出现了两个问题:
3.一、提示libzip版本过低,若是有这种问题出现,具体能够上网查。无非就是从新下载安装。重点就是要在上面内容里加上对应的参数,例如个人是libzip版本低就加上 --with-libzip=/usr/local/libzip-1.3.2
3.二、提示内存不足。我机器是2G。因此提早加上 --disable-fileinfo**session
四、编译和安装php7
make && make install
通常等个10来20分钟就完成了。视机器配置而定。
五、下载与编译安装mod_fcgid
安装Apache的mod_fcgid模块 mod_fcgid模块能够实现Apache下多版本php同时运行。能够自行上网找
我是会用的是2.3.9版本 压缩包格式是gz
cd / tar -zxvf mod_fcgid-2.3.9.tar.gz cd mod\_fcgid-2.3.9 APXS=/usr/local/apache/bin/apxs ./configure.apxs make make install
安装好以后找到apache里的httpd.conf(lamp默认是/usr/local/apache/conf)文件
大概150行左右,就是LoadModule加载模块最后一行,添加
LoadModule fcgid_module modules/mod_fcgid.so
其实上面编译安装后就会自动添加了,不用动手操做,在此记录下来。
六、多域名多版本php配置(就是在这里卡了一下)
网上不少资料和文章都是在apache的httpd.conf添加相似如下的代码
,而后重启apache。重启后直接死掉,php没法解析
#加载fcgid扩展模块(额外说明,fcgid根据实际apache版本对应,apache2版本测试2.3.6正常) LoadModule fcgid\_module modules/mod\_fcgid.so #添加映射 AddHandler fcgid-script .fcgi .php # 设置PHP\_FCGI\_MAX\_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程在处理完全部请求前退出 FcgidInitialEnv PHP\_FCGI\_MAX\_REQUESTS 1000 #php-cgi每一个进程的最大请求数 FcgidMaxRequestsPerProcess 1000 #php-cgi最大的进程数 FcgidMaxProcesses 3 #最大执行时间 FcgidIOTimeout 120 FcgidIdleTimeout 120 #限制最大请求字节 (单位b) FcgidMaxRequestLen 2097152 AddType application/x-httpd-php .php #------这里是默认虚拟主机配置 #php.ini的存放目录 FcgidInitialEnv PHPRC "D:/php5.4.4/" #php-cgi的路径 FcgidWrapper "D:/php5.4.4/php-cgi.exe" .php
后来想到这里的配置是全部域名都调用的,换个法子。去到须要升级成7.3php版本的域名下(lamp默认是/usr/local/apache/conf/vhost)填写红框内的内容。
为了方便复制
#映射fcgi执行脚本 AddHandler fcgid-script .fcgi .php #设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程 在处理完全部请求前退出 FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000 #php-cgi每一个进程的最大请求数 FcgidMaxRequestsPerProcess 520 #最大执行时间 FcgidIOTimeout 300 #最大空闲时间 FcgidIdleTimeout 300 #限制最大请求字节 FcgidMaxRequestLen 2097152 #php程序最大文件上传限制50MB,默认只有2MB MaxRequestLen 52428800 #php安装路径 FcgidInitialEnv PHPRC "/usr/local/php7.3/" #php-cgi脚本执行路径 FcgidWrapper "/usr/local/php7.3/bin/php-cgi" .php #这里要注意是填写在<Directory></Directory>里 Options FollowSymlinks ExecCGI
最后Options里的FollowSymlinks ExecCGI记得添加。不填写ExecCGI,php运行不了。FollowSymlinks不填写,一些项目里的直接进不去,就是打开链接报错,说目录没有权限访问。
最后重启apache就搞定了。能够在脚本输入phpinfo();打开链接访问就好了。
能够看到连接的.cn和.com是不一样域名但访问的是同一份文件。
有参考过的文章:
https://my.oschina.net/u/2366984/blog/809833
https://www.cnblogs.com/sky-view/p/5112888.html
https://my.oschina.net/u/2366984/blog/543148
https://blog.51cto.com/12529218/2313761
https://www.osyunwei.com/archives/10174.html