安装 PHP 遇到的问题

简介

在博客 PHP 开发准备 介绍了安装并部署 PHP 程序到 Nginx.

今天分享在安装中遇到的问题和其他工具的安装, 以及常用的操作, 包括 MySQL, Nginx 等.

pecl 安装

PEAR 是 PHP 扩展与应用库(PHP Extension and Application Repository) 的缩写。它是一个 PHP 扩展及应用的一个代码仓库,简单地说,PEAR 就是 PHP 的 CPAN.

PECL (PHP Extension Community Library),PHP 的扩展库,它提供了一系列已知的扩展库,由 C++ 等其他语言编写而成,以 .so 形式出现,.so 为共享库, 是 shared object, 用于动态连接的, 和 dll 差不多,为比 PEAR 更快,但是与 PEAR 不同的是,PECL 需要在服务器上配置并被注册到主机中.

最直接的表述: PEAR 是 PHP 的上层扩展,PECL 是 PHP 的底层扩展.

下面说如何安装 pecl 和 pear.

1.下载 pear

1
curl -O http://pear.php.net/go-pear.phar

2.安装 pear

1
sudo php -d detect_unicode=0 go-pear.phar

3.执行以上命令后会进行安装过程,会有一些配置选项

输入1,回车,配置 pear 路径为:/usr/local/pear
输入4,回车,配置命令路径为:/usr/local/bin

4.回车两次,其他让其默认,安装完成.

5.可以通过命令检查 pear 是否安装成功

1
pear version

或者执行:

1
pecl version

可以看到类似信息:

1
2
3
PEAR Version: 1.10.1
PHP Version: 5.6.27
Zend Engine Version: 2.6.0

常用操作

MySQL 操作

基本操作:

1
2
3
4
mysql.server start #启动
mysql.server stop #停止
mysql -u root -p #用 user 和 pwd 连接
php-fpm 相关操作

1.运行 php-fpm

1
sudo php-fpm -D

2.关闭 php-fpm

1
sudo killall php-fpm

3.查看 php-fpm 运行状态

1
sudo lsof -Pni4 | grep LISTEN | grep php

可以看到 (fpm 默认在 9000 端口)

1
2
3
4
php-fpm 84200 root 8u IPv4 0x91959c43a1ea5abd 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 84201 _www 0u IPv4 0x91959c43a1ea5abd 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 84202 _www 0u IPv4 0x91959c43a1ea5abd 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 84203 _www 0u IPv4 0x91959c43a1ea5abd 0t0 TCP 127.0.0.1:9000 (LISTEN)

4.php-fpm 开机启动

1
2
ln -sfv /usr/local/opt/php56/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

Nginx

1.测试配置是否有语法错误

1
nginx -t

2.启动 nginx

1
sudo nginx

3.重新加载配置|重启|停止|退出 nginx

1
nginx -s reload|reopen|stop|quit

4.开机启动:

1
2
ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

5.nginx 监听 80 端口:

1
2
sudo chown root:wheel /usr/local/Cellar/nginx/1.6.0_1/bin/nginx
sudo chmod u+s /usr/local/Cellar/nginx/1.6.0_1/bin/nginx

常用目录

因为使用了 Homebrew 安装的 PHP, 配置文件的目录不是常规的 /etc

这里有几个目录需要知道, 如下:

1
2
3
/private/etc
/usr/local/etc/php/5.6
/usr/local/var/www

遇到问题

1.执行 sudo php-fpm -D 报 php56-intl/intl.so 加载问题

warning 的内容大致如下:

1
2
3
4
5
6
7
8
9
NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php56-intl/intl.so' - dlopen(/usr/local/opt/php56-intl/intl.so, 9): image not found in Unknown on line 0
<br />
<b>Warning</b>: PHP Startup: Unable to load dynamic library '/usr/local/opt/php56-intl/intl.so' - dlopen(/usr/local/opt/php56-intl/intl.so, 9): image not found in <b>Unknown</b> on line <b>0</b><br />
Unknown(0) : Warning - PHP Startup: Unable to load dynamic library '/usr/local/opt/php56-intl/intl.so' - dlopen(/usr/local/opt/php56-intl/intl.so, 9): image not found
[31-Dec-2016 22:40:38] NOTICE: PHP message: PHP Warning: PHP Startup: mcrypt: Unable to initialize module
Module compiled with build ID=API20131226,NTS
PHP compiled with build ID=API20131226,NTS,debug
These options need to match
in Unknown on line 0

解决方案: 执行下面的命令, 即可解决.方案来源 Github.

1
brew reinstall --build-from-source php56-intl

2.执行 sudo php-fpm -D 报 PHP Startup: mcrypt: Unable to initialize module

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
31-Dec-2016 22:56:51] NOTICE: PHP message: PHP Warning: PHP Startup: mcrypt: Unable to initialize module
Module compiled with build ID=API20131226,NTS
PHP compiled with build ID=API20131226,NTS,debug
These options need to match
in Unknown on line 0
<br />
<b>Warning</b>: PHP Startup: mcrypt: Unable to initialize module
Module compiled with build ID=API20131226,NTS
PHP compiled with build ID=API20131226,NTS,debug
These options need to match
in <b>Unknown</b> on line <b>0</b><br />
Unknown(0) : Warning - PHP Startup: mcrypt: Unable to initialize module
Module compiled with build ID=API20131226,NTS
PHP compiled with build ID=API20131226,NTS,debug
These options need to match

解决方案:

1
brew reinstall --build-from-source php56-intl

3.连接 mysql

使用 mysql -u root -p 连接 mysql, 提示 Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock 错误.

解决方案: 启动 mysql

1
mysql.server start

重新连接即可.

坚持原创技术分享!