通过homebrew升级PHP至5.6

若之前有关注过我的朋友一定看过下面这几篇文章:

  1. Linux平滑编译升级php至5.5.0
    http://levi.yii.so/archives/2987
  2. PHP 5.4.16升级到PHP 5.4.17
    http://levi.yii.so/archives/2989
  3. 继续平滑升级你的PHP到5.6.0,及更新代码示例说明
    http://levi.yii.so/archives/3596

不过上面这几篇都是针对liunx的,而今天要写的是mac下通过homebrew升级PHP到5.6。之前有写过这样几篇文章

  1. Mac开发者利器-Homebrew介绍及安装
    http://levi.yii.so/archives/1742
  2. 通过homebrew安装、配置nginx、mysql、php-fpm
    http://levi.yii.so/archives/3129
  3. Mac下升级php、nginx、redis;更新os至10.9后注意事项
    http://levi.yii.so/archives/3189

如果你都有看过,也许你也会像我一开始这样认为的,只要下面这样就可以了

brew update
brew upgrade

结果呢?如果一开始你并不是PHP5.6,那是无法升级到5.6来的哦,因为在homebrew下,php是根据大版本号来区分安装和升级的。比如php5.5系列就是php55;php5.6系列就是php56咯;这也包括对应版本的应用,比如:php55-redis、php56-redis。

这就是说,要从PHP5.5升级到PHP5.6就需要重新安装一遍,如下:

brew update
brew install php56

先别急着敲回车哦,如果真这么简单就好了。首先我是个php-fpm党,而brew默认配置是php-apache,如果你和我一样,那么需要配置安装选项

升级PHP5.6的方法

# 更新配置
brew update

#去掉PHP55的link
brew unlink php55

#安装PHP56
brew install php56 
--homebrew-apxs 
--without-apache 
--with-debug 
--with-fpm 
--with-gmp 
--with-homebrew-curl 
--with-homebrew-libxslt 
--with-homebrew-openssl 
--with-imap 
--with-libmysql 
--with-tidy

很简单吧,不过有几个注意点:

注意点1:使用php-fpm

--without-apache 
--with-fpm 

注意点2:请先确认是否需要支持pgsql

如果你本地没有安装pgsql,安装是会报错的哦,请先确定你受否要配置pgsql

--with-pgsql

注意点3:不要选择HEAD

问题:

  1. 默认正常的路径为:/usr/local/Cellar/php56/5.6.0/
    使用HEAD的方式安装,编译路径为:/usr/local/Cellar/php56/head/

    这也就意味着,你可能无法默认安装PHP拓展,例如:

    brew install php56-redis
  2. HEAD方式安装的版本为开发版:php 5.6.0.2-dev,而非正式版

你也可以自己查看info来决定安装配置

brew info php56

最后几个步骤:

设置文件、目录权限,以及设置开机启动

# 设置目录权限
chmod -R ug+w /usr/local/Cellar/php56/5.6.0/lib/php

# 设置pear
pear config-set php_ini /usr/local/etc/php/5.6/php.ini

# 拷贝开机启动文件
cp /usr/local/Cellar/php56/5.6.0/homebrew.mxcl.php56.plist ~/Library/LaunchAgents/

# 启动开机配置
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

# 修改php-fpm的用户组为root
sudo chown root:wheel /usr/local/Cellar/php56/5.6.0/sbin/php-fpm

# 修改php-fpm的权限
sudo chmod u+s /usr/local/Cellar/php56/5.6.0/sbin/php-fpm

安装php5.6相关组件

# 安装redis
brew install php56-redis

# 安装xdebug
brew install php56-xdebug

# 安装mcrypt
brew install php56-mcrypt

卸载PHP5.5及相关组件

# 卸载PHP55
brew uninstall php55

# 卸载redis
brew uninstall php55-redis

# 卸载xdebug
brew uninstall php55-xdebug

# 卸载mcrypt
brew uninstall php55-mcrypt

# 卸载intl,如果你有安装的话
brew uninstall php55-intl

# 清除缓存以及老旧版本文件
brew cleanup -s

小提示:

  1. 最后一定要清除缓存和老旧文件,否则下次更新的时候,PHP还会为你更新php55哦
  2. 你本地安装的PHP55的组件可能和我不一致哦,具体你可以执行下面的命令查看
    ls /usr/local/Cellar/php55*
  3. 如果出现以下错误提示,可能是以为之前升级过太多的版本造成的
    $ brew uninstall php55-mcrypt
    Error: php55-mcrypt has multiple installed versions
    Use `brew remove --force php55-mcrypt` to remove all versions.

    不需担心,按照提示remove即可

    brew remove --force php55-mcrypt
    brew cleanup -s

    清除老旧版本直到查找不到php55

    ls /usr/local/Cellar/php55*

现在可以启动php-fpm了嘛,先别急,还有下面几个地方需要注意哦

注意点1:删除php55开机启动

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php56.plist
rm -rf ~/Library/LaunchAgents/homebrew.mxcl.php55.plist

注意点2:配置bin目录

因为我之前配置过了,所以没有提,如果你没有配置过,可以参考下面

PATH="/usr/local/bin:$PATH"
source ~/.bash_profile

或者

export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH"

注意点3:配置PHP

时区修改
http://levi.yii.so/archives/2828

session配置在redis中
http://levi.yii.so/archives/2889

php-fpm 设置为后台启动,不知道为什么php5.6版本中,默认并非后台启动,你可以配置如下:

vi /usr/local/etc/php/5.6/php-fpm.conf

# 找到并修改下面配置
daemonize = yes

更多内容,见:
http://levi.yii.so/archives/3127

现在,你可以启动php-fpm啦

# 先关闭之前的php-fpm
sudo killall php-fpm

# 启动PHP-fpm
/usr/local/Cellar/php56/5.6.0/sbin/php-fpm --fpm-config /usr/local/etc/php/5.6/php-fpm.conf

如果你启动php-fpm的时候出现了以下错误提示,说明你通过brew安装的时候编译的配置找不到了

$ /usr/local/Cellar/php56/5.6.0/sbin/php-fpm --fpm-config /usr/local/etc/php/5.6/php-fpm.conf
dyld: Library not loaded: /usr/local/lib/libpq.5.dylib
  Referenced from: /usr/local/Cellar/php56/5.6.0/sbin/php-fpm
  Reason: image not found
Trace/BPT trap: 5

上面这个错误是因为一开始我安装了pgsql,而之后因为我不使用pgsql,将其卸载了后重启报错的。如果你也出现了上面这样的错误提示。可以尝试以下解决办法:

  1. 你需要提示的缺失组件,例如pgsql。那么补充安装相应组件
  2. 如果你不需要缺失的组件,卸载当前版本PHP,重新编译安装
    brew uninstall php56
    brew install php56 
    # ...详细见上面方法,这里不再重复

而我个人选择的是第二种方式(多装几遍,也有好处)

在末尾,稍微提一句,如果你像我一样在PHP5.6之前也安装了php相关的开源程序,比如phpdoc,那么在升级后,会因内核不能用咯。这个时候别去找问题了,重新安装吧,最有效率。

brew uninstall phpdocumentor
brew cleanup -s
brew install phpdocumentor

最后,有什么问题,大家可以给我留言哦,别忘了关注我的博客哦:

http://list.qq.com/cgi-bin/qf_invite?id=b6eb34388fd016582957d6e50d005146e24fe6b166ee66c0



此条目发表在PHP分类目录,贴了, 标签。将固定链接加入收藏夹。