Mac + Nginx + Mysql + Php
PHP 编译安装
脚本编译安装
MacOS 环境可使用 Homebrew 或 Phpbrew 来安装 PHP,参考代码如下:
# Homebrew 安装示例brew install php72 --with-apache --with-freetype# Phpbrew 安装示例phpbrew install -d 7.4.20 +default +fpm +debug
手动编译安装
1. 清理本机PHP
```// phpizewhich phpizesudo rm -rf /usr/bin/phpize// phpwhich phpsudo rm -rf /usr/bin/phpsudo rm -rf /usr/lib/phpsudo rm -rf /usr/share/php// php-configwhich php-configsudo rm -rf /usr/bin/php-config// php-fpmwhich php-fpmsudo pkill -INT -o php-fpmsudo rm -rf /usr/sbin/php-fpmsudo rm -rf /private/etc/php-fpm.dsudo rm -rf /private/etc/php*
<a name="ry0qm"></a>
### 2. 下载并编译PHP源码
1. 从 [PHP官网](http://php.net) 下载源码, 解压, 并进入该目录。
1. 编译安装。 `./configure` 这一步,参数众多 ,可以尽量减少,以最大限度的减少出错的概率。而没有被编译进来的模块,可以通过对模块单独编译的方式,来二次启用这些模块。这些模块以后会以.so文件的形式,出现在extension目录之中。参数有疑惑时, 可以通过 `./configure --help` 进行查看。
```shell
// 执行过make, 就需要clean, 第一次不需要
make clean
// 编译的配置, 参数根据情况修改
./configure --prefix=/usr/local/php72
// 打包
make
// 安装
sudo make install
3. 进行软链操作
对系统目录下的相关文件,进行软连接操作. 请注意检查对应系统目录下的相关文件,是否删除完成
ln -s /usr/local/php72/bin/phpize /usr/local/bin/phpize
ln -s /usr/local/php72/bin/php /usr/local/bin/php
ln -s /usr/local/php72/bin/php-config /usr/local/bin/php-config
编译参数
—prefix
默认情况下, make install 会将所有文件安装至 /usr/local/bin , /usr/local/lib 等目录,使用 --prefix 可以指定安装路径。
—with-iconv
iconv是一个计算机程序,采用命令行界面,允许将某种特定编码的文件转换为另一种编码。基于GPL公开源代码,是GNU项目的一部分。在各种UNIX操作系统下均可使用。目前还不支持64位架构
执行 ./configure 时失败,且出现如下提示,说明需要安装 libiconv
configure: error: Please specify the install prefix of iconv with --with-iconv=
安装 libiconv
# 下载 libiconv 并解压
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
tar zxvf libiconv-1.15.tar.gz
# 安装 libiconv 至目录 /usr/local/libiconv
./configure --prefix=/usr/local/libiconv
make
sudo make install
编译 PHP 时指定 libiconv
./configure --with-iconv=/usr/local/libiconv
// 放弃使用 iconv
./configure --without-iconv
运行多版本 PHP
思路: 配置不同版本的PHP-FPM, 分别监听不同端口. 再配合Nginx的配置, 实现多版本PHP的快速切换
已安装 PHP 信息
以 Homebrew 安装的 PHP 为例,安装信息如下:
# PHP 路径如下:
/usr/local/Cellar/php/7.2.11/bin/php
# 查看 php 信息命令
./usr/local/Cellar/php/7.2.11/bin/php -v
# php-fpm 路径如下:
/usr/local/Cellar/php/7.2.11/sbin/php-fpm
# php-fpm 的配置文件路径如下:
/usr/local/etc/php/7.2.11/php-fpm.conf
MacOS 自带的 PHP 信息如下,可以使用 php-fpm -t 命令测试配置文件,会提示配置文件的路径。
# php-fpm 的配置文件路径如下:
/private/etc/php-fpm.conf
# ====== php-fpm -t 输出结果如下 =======
# NOTICE: configuration file /private/etc/php-fpm.conf test is successful
php-fpm 启动脚本配置
为方便管理, 将php源代码中的 init.d.php-fpm.in(php-fpm 启动脚本)文件复制到每个php版本安装文件的 sbin 目录下。将 init.d.php-fpm.in 软链到 /usr/local/bin 目录下,以便在任何目录都可以执行 php72 相关的命令。
# 复制 php-fpm 启动脚本
cp PHP源码路径/sapi/fpm/init.d.php-fpm.in PHP安装路径/sbin
# 软链接 php72
ln -s PHP安装路径/sbin/init.d.php-fpm.in /usr/local/bin/php72
编辑 init.d.php-fpm.in 文件,根据实际的安装路径修改相关的配置。
prefix=/usr/local
exec_prefix=/usr/local/Cellar/php@7.2/7.2.15
# php-fpm 执行文件
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
# php-fpm.confg 配置文件, 使用 php-fpm -t 命令查看
php_fpm_CONF=${prefix}/etc/php/7.2/php-fpm.conf
# php-fpm.pid 保存pid值的文件, 在 php-fpm.conf 中配置
php_fpm_PID=${prefix}/var/run/php72-fpm.pid
编辑 php-fpm.conf 文件,修改“pid”的保存文件路径,确保与上一步的配置相匹配。操作后就能在任意位置通过 php72 start 来启动7.2版本的 php-fpm。
[global]
; Pid file
; Note: the default prefix is /usr/local/var
; Default Value: none
pid = run/php72-fpm.pid
可以根据 init.d.php-fpm.in 文件的相关配置,手动尝试手动运行 php-fpm。
./php-fpm --fpm-config=/usr/local/etc/php/7.2/php-fpm.conf --pid=/usr/local/var/run/php72-fpm.pid
php-fpm 启动脚本错误
执行 php-fpm 启动脚本时,出现报错找不到该命令。是因为文件的权限信息没有正确配置,需要将该文件设置为可执行文件
# 错误信息如下:
./init.d.php-fpm.in: command not found
# 通过`ls -la`命令查看文件的权限信息如下:
-rw-r--r--@ 1 zed staff 2390 Oct 9 23:09 init.d.php-fpm.in
# 将 init.d.php-fpm.in 修改为可执行文件
chmod -R 555 init.d.php-fpm.in
Nginx 配置
编辑 nginx.conf 配置文件,在 http 配置模块中增加 upstream 配置
# php72版本的 fpm 监听 9011
upstream php72 {
server 127.0.0.1:9011;
}
# php71版本的 fpm 监听 9000
upstream php71 {
server 127.0.0.1:9000;
}
为每个项目配置不同的php版本环境即可, 修改后需要重新加载Nginx配置 nginx -s reload
location ~ \.php$ {
# 根据需求切换 PHP 版本
fastcgi_pass php72;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
