1. phpのバージョンを切り替える

    案件やライブラリの都合で、phpのバージョンを切り替えたい時や
    新しいphpを試したいけど既にあるアプリケーションに影響を与えたくない、といったケースがあるかと思います。

    今回さくらのVPSで最新のphpを試す際にやった事を書いておきます。
    現状は少し前のphpがモジュール版で動いており、最新のphpを特定のディレクトリだけcgi版として切り替えて使う、という設定です。


    ダウンロード


    phpのバージョンはダウンロードしたいものに変更してください。


    http://php.net/releases/



    wget http://jp1.php.net/get/php-5.6.3.tar.gz/from/this/mirror
    tar zxvf php-5.6.3.tar.gz
    cd php-5.6.3

     

    インストール

    オプションは ./configure --help で確認して追加、変更してください。
    ./configure \
    --prefix=/usr/local/lib/php-5.6.3 \
    --with-config-file-path=/usr/local/lib/php-5.6.3 \
    --program-suffix=56 \
    --enable-mbstring \
    --enable-libgcc \
    --enable-pcntl \
    --with-zlib \
    --with-openssl \
    --with-curl \
    --with-config-file-scan-dir=/usr/local/php-5.6.3/lib/conf.d \
    --enable-phpdbg \
    --with-mysql \
    --with-pdo-mysql \

    make
    make test
    make install

     

    注意点として。

    • configureの際に–with-apxs2=/usr/local/apache2/bin/apxsを付けない事!Apacheのモジュール版としてPHPがconfigureされてしまうため。

    • prefixやprogram-suffixは必須ではないが、後の混乱を防ぐためにもつけたほうが良い。ここでは、/usr/local/lib/php-5.6.3にインストールされ、プログラムのファイル名の語尾に「56」がつく。

    • 余談。configureの際に「-–prefixがおかしい、 --helpで確認して」みたいなエラーが出て少しハマった。「--」を書き直したら問題なかった。

    • configureの途中でエラーが出る場合、大抵はyum install で解決。(自己責任で)参考: http://blog.justoneplanet.info/2009/08/18/php-5-3-0%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%AD%E3%82%B0/

    • make testで若干FAILEDとWARNEDが出たが進んだ。



    これでひとまずphpのインストールは終了。


    念のため確認。



    #確認ファイル作成
    vim test.php

    <?php
    echo phpinfo();
    ?>

    #実行
    /usr/local/lib/php-5.6.3/bin/php-cgi56 test.php

    #phpのバージョン、Server APIを確認

    僕の場合タイムゾーンが不明のWarningが出たのでiniファイルを追加しました。
    vim /usr/local/lib/php-5.6.3/php.ini

    date.timezone ="Asia/Tokyo"

     

    切り替え

    phpインストールが無事にできたら切り替えのため、httpd.confを変更します。変更点はOptions Noneをコメントアウトして、シンボリックリンクを許可する設定にします。
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

    <Directory "/var/www/cgi-bin">
    AllowOverride None
    # Options None
    Options FollowSymLinks
    Order allow,deny
    Allow from all
    </Directory>

    confを編集したので再起動。
    /etc/init.d/httpd restart

    次に/var/www/cgi-bin/にphp-cgi56へのシンボリックリンクを作ります。
    ln -s /usr/local/lib/php-5.6.3/bin/php-cgi56 /var/www/cgi-bin/php56

    phpのバージョンを切り替えたいディレクトリに.htaccessを作成します。
    vim .htaccess

    AddHandler php-cgi56 .php
    Action php-cgi56 /cgi-bin/php56

    拡張子「.php」ファイルをphp-cgi56で実行、php-cgi56とは/cgi-bin/php56ですよ、の意。

    これでphpの切り替えは完了です。

     

    MySQLのエラー

    MySQL接続時に「SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client」が出て接続できませんでした。

    原因はmy.cnfに「old_passwords=1」を設定していたためで、これをコメントアウト、MySQLユーザーのパスワードを作り直せば解決しました。
    vim /etc/my.cnf
    #コメントアウト
    #old_passwords=1

    #mysql再起動
    sudo /etc/rc.d/init.d/mysqld restart

    #パスワード変更
    mysql -u {ユーザー名} -p

    mysql> use mysql
    mysql> select host,user,password from user;

    #パスワードが16桁の場合old_passwordsなので変更
    mysql> set password for ユーザー名@localhost=password('新しいパスワード');

     

    参考

    Posted by Shunsuke Hayashi on 2014年12月15日
    Categories apache MySQL php