かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Mac環境 HomebrewでPHPのバージョンを上げる時のメモ

PHPのバージョンが5.4のPCがあったので、メインの開発で使用していたバージョンと同じ5.6系にHomebrewでアップデートした時のメモ。

Homebrewをアップデートする

$ brew update

「Error: Formulae found in multiple taps」というエラーが出た

Error: Formulae found in multiple taps: 
 * homebrew/php/php54
 * josegonzalez/php/php54

Formulaeが複数tapされてるのが原因っぽいので片方のtapを解除すればOK

$ brew untap josegonzalez/php

今使っているPHPバージョンのリンクを解除する

$ brew unlink php54

PHP 5.6系をインストールする

使えるオプションを確認する

$ brew options php56
--with-cgi
    Enable building of the CGI executable (implies --without-fpm)
--with-debug
    Compile with debugging symbols
--with-enchant
    Build with enchant support
# 略

[オプションの参考]: PHP: 中心となる configure オプションのリスト - Manual

PHP5.6系をインストール

$ brew install php56

色々インストール

$ brew install php56-apcu php56-mcrypt php56-memcache php56-opcache php56-intl php56-igbinary

インストールが完了したらバージョンを確認

$ php -v
PHP 5.6.19 (cli) (built: Mar 14 2016 11:55:28)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

インストールしたバージョンが表示されてたらOK

php -vでWarningやErrorが表示されたてハマったメモ

PHP Warning: PHP Startup: <モジュール名>: Unable to initialize module

--with-debugオプションを付けてPHPをインストールすると、こんな感じのエラーがでました。

$ php -v
Cannot load Zend OPcache - it was built with configuration API220131226,NTS, whereas running engine is API220131226,NTS,debug
PHP Warning:  PHP Startup: apcu: 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
# 中略
PHP 5.6.19 (cli) (built: Mar 26 2016 01:06:07) (DEBUG)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

色々インストールで入れモジュールについて、Warningが表示された。
どうやらモジュールにdebugってのが無いのが原因っぽい。

--with-debugの時はモジュールインストール時に-fsオプションを付けないとダメっぽい。 少し面倒だけど一度入れたモジュールをアンインストールして、-fsオプションを付けてインストールしなおせばOK

$ brew uninstall php56-apcu php56-mcrypt php56-memcache php56-opcache php56-intl php56-igbinary
# 削除される
$ brew install php56-apcu php56-mcrypt php56-memcache php56-opcache php56-intl php56-igbinary -fs
# 再度インストールされる
$ php -v
PHP 5.6.19 (cli) (built: Mar 26 2016 01:12:01) (DEBUG)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

[参考]: Please remove all bintray binary · Issue #1743 · Homebrew/homebrew-php · GitHub  

ちょっと乱暴なやり方だけど、メンドーだから--with-debug無しでいいや!って場合は、PHPをインストールし直す方法もある

$ brew rm php56 && brew install php56

php56-opcache のインストールでエラーになる場合

PHP--enable-opcacheオプション付きで入れると良いっぽい?

# http://php.net/manual/opcache.installation.php (PHP 5.5 & 5.6)
brew update && brew upgrade
brew rm php56 && brew install php56 --enable-opcache

[参考]: php56-opcache install fails · Issue #1320 · Homebrew/homebrew-php · GitHub  

httpd.confのlibphp5.soのパスを変更する

Homebrewでhttpdを入れている場合httpd.confは、httpd24なら /usr/local/etc/apache2/2.4/ にある。
ファイルを開き「LoadModule php5_module」と書かれている所を変更。

# php56のパスに変更する
LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so

php.ini を変更する

php.iniは /usr/local/etc/php/56/php.iniにある。
一緒に前のバージョンのphp.iniも開いて必要な部分をコピペすると楽。

タイムゾーンと文字関係の設定

date.timezone = Asia/Tokyo
; 中略
default_charset = "UTF-8"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII

MySQLの設定

たぶん「mysql.default_socket」が設定されて無くてこのままだとMySQLに繋がらないので、前のphp.iniで同じ部分を探してきてmysql.sockのパスを追加する

[MySQL]
; 中略
; MySQL defaults.
; http://php.net/mysql.default-socket
; ↓ mysql.sockのパスを追加
mysql.default_socket = /usr/local/var/mysql/mysql.sock

apachemysqlを起動させて確認

$ sudo apachectl start
$ mysql.server start

<?php phpinfo(); ?> を表示させてエラーがないこと・WordPressなどMySQLを使っているもをチェックしてMySQLPHPから使えていることが確認できれば、これでPHPのバージョン変更は(たぶん)オケオケオッケー♪  

感想

ほとんど、HomebrewでPHPのバージョンあげる所でのエラーが大変でした。
nodeやrubyとかと比べて、PHPはこのバージョンを切り替えるってのに凄く苦労するって意識が振り払えられないです。。。


[参考]