导言
windows 用户见windows - apache 配置多个版本的 php
因为项目需要,要在 Linux 上使用apache 部署多个 PHP 项目,且 不同项目的要用到不同的 PHP 版本,因此在这里记录下。
- Linux:CentOS7
- Apache:2.4
- PHP : 5.6 需要安装7.4
步骤
服务器使用的是阿里云的,里面已经集成了 Apache & PHP5.6,可以直接使用他们配置的文件,这里只需要安装PHP7即可
一、安装PHP7.4
- 访问php官网下载列表,找到PHP7.4,复制其下载链接。
- 阿里默认PHP安装在 /usr/local/ ,进入该目录,并下载PHP7.4到该目录
1 | 下载安装包 |
注意编译时安装路径的设置
上面的参数除了PHP程序的安装路径,还有其配置文件的路径
如果路径错误,会导致php无法正常运行,并且难以察觉
更多的选项见./configure --help
php编译参数注解(该链接内容仅作参考,以./configure –help
为准)提示 Package ‘xxxx’, required by ‘virtual:world’, not found
php 源码安装常见问题汇总
Installing Libsodium
当出现下面的界面,则表示安装成功
1 | 测试编译 |
- 配置PHP.ini。 在之前编译的源码包中,找到 php.ini-production,复制到/usr/local/php下,并改名为php.ini
cp php.ini-production /usr/local/php74/php.ini
[cgi]修改配置文件php.ini
1
2
3vim /usr/local/php74/php.ini
修改
cgi.fix_pathinfo=0
见 为什么php.ini设置cgi.fix_pathinfo=0
**[可选项]**设置让PHP错误信息打印在页面上
1
2
3 vim /usr/local/php74/php.ini
display_errors = off
将 Off
改成 On
- 配置php-fpm配置www.conf
1
2
3
4
5
6
7修改php-fpm配置文件:
cd /usr/local/php74/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
去掉 pid = run/php-fpm.pid 前面的分号
开启错误日志,否则无法运行php-fpm
阿里云有配置过日志目录,因此使用 find / -name php-fpm.log 即可找到日志保存目录1
2
3
4
5
6cd php-fpm.d
cp www.conf.default www.conf
vim www.conf
(1)更改侦听端口为9001(9000 为默认端口)
(2)修改用户和组为当前用户(默认会添加nobody这个用户和用户组)
- 测试php-fpm是否安装成功
1
2
3
4启动 php74 内的 php-fpm
/usr/local/php74/sbin/php-fpm
看是否有报错,没有任何提示,则说明 fpm 安装配置无误
查看是否启动成功
ps aux|grep php
- 添加 php-fpm 到系统服务内
1
2
3
4将 fpm 管理程序放入系统
cp /usr/local/php-7.4.15/sapi/fpm/init.d.php-fpm /etc/init.d/php74-fpm
添加可执行权限
chmod +x /etc/init.d/php74-fpm
设置开机启动
chkconfig --add /etc/init.d/php74-fpm
更多命令
1
2
3service php74-fpm start #启动
service php74-fpm restart #重启
service php74-fpm stop #停止
- php-fpm配置文件参数解释
见 脚本之家|配置php-fpm参数及配置详解
需要注意的地方
./configure
编译参数时,使用./configure --help
查看当前版本的编译参数- 编译安装时,设置PHP安装路径有两种方式,见Linux下指定pip install和make install安装路径
- 并没有找到一个 fpm 管理多个 php 的办法,因此启动多版本PHP需要多个相应的 fpm
配置apache
- 安装mod_fcgid.so,该模块可以支持 apache 运行多版本的 php.
请根据apache版本选择对应版本的mod_fcgid.so,这里以apache2.4为例
1 | 下载 |
- 修改httpd.conf , 安装好该模块后,httpd.conf 会自动添加加载该模块。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19备份httpd.conf
cp /usr/local/apache/httpd.conf /usr/local/apache/httpd.conf.bak
编辑设置 mod_fcgi
vim /usr/local/apache/conf/httpd.conf
查找是存在mod_fcgid模块
/mod_fcgid/
需要其开启,没有则手动添加
LoadModule fcgid_module modules/mod_fcgid.so
FcgidMaxProcesses 1000 #php-cgi最大的进程数
MaxRequestLen 52428800 #php程序最大文件上传限制50mb 默认为131072(128kb)
读取并运行 php 文件
找到AddType application/x-gzip .gz .tgz
在该行下面添加
AddType application/x-httpd-php .php
保存退出
:wq!
apache php fastcgi模式下,默认上传文件大小只有131072字节(128kb),需要在apache的配置文件中修改
fastcgi模式下,在php.ini中修改upload_max_filesize等参数无效。
- 配置虚拟机
1
2
3
4
5
6
7vim /usr/local/apache/conf/httpd.conf
找到 #Include conf/extra/httpd-vhosts.conf,取消注释
保存退出
vim /usr/local/apache/conf/extra/httpd-vhost.conf
里面给出了一个虚拟机配置模板按照该模板配置即可
如图,建立了两个虚拟机,并指定了不同的PHP
访问一下
再试试另一个
成功
需要注意的地方
- 需要添加
AddType application/x-httpd-php .php
才能使解析php文件 - apache2.4 允许外部访问 参数简化为
Require all granted
,之前版本为1
2
3AllowOverride All
Order allow,deny
Allow from all
相关资料:
- Linux 安装php7
- centos6.5 源码安装php7
- centos7 编译安装 php7.4
- Package ‘oniguruma’, required by ‘virtual:world’, not found
- linux安装php遇到的No package ‘sqlite3’ found,解决方法:yum install sqlite-devel
- CentOS 7编译安装PHP 7.4提示No package ‘libzip’ found或者(libzip >= 0.11)
- 安装libsodium库解决libsodium not found问题
- 编Installing Libsodium and the PHP extension
- make: *** No targets specified and no makefile found. Stop
- configure: error: Package requirements (sqlite3 > 3.7.4) were not met: No package ‘sqlite3’ found
- configure: WARNING: unrecognized options: –with-gd
- Linux下指定pip install和make install安装路径
- phpenv - php多版本配置
- Linux 安装多个php版本并配置
- windows - apache 配置多个版本的 php
- php的cgi.fix_pathinfo解析
- 配置 php-fpm 时出现’/private/etc/php-fpm.conf’: No such file or directory (2)
- 为什么php.ini设置cgi.fix_pathinfo=0
- Linux下apache虚拟主机配置多版本php同时运行
- 脚本之家|配置php-fpm参数及配置详解
- apache 虚拟目录错误:CustomLog takes two or three arguments, a file name, a custom log format string or format name, and an optional “env=” clause