Raspberry Pi2でPHP7のビルド・インストール
はじめに
PHP7が出たので自鯖のPHPを5.3から7へ移行しました
自鯖で稼働しているPHP関連のものはowncloudとWordpressですが移行後特にこれといった問題は起きていません
PHP7のインストールからMySQLの接続確認まで行います
インストールした環境はRaspberry Pi2 Wheezy上になります
Debian系やその他OSでも前提パッケージ名が違う程度だと思います
前提パッケージのインストール
1$ sudo apt-get install libxml2 libxml2-dev pkg-config libssl-dev libreadline5 libreadline-gplv2-dev libpspell-dev apache2-dev
libcurl4-openssl-devもいるかもしれません
コンパイル インストール
適当に公式からアーカイブファイルを落として展開する
その後
1$ sudo sh ./configure \
2--with-readline \
3--enable-pcntl \
4--with-gettext \
5--enable-phpdbg \
6--enable-phpdbg-webhelper \
7--enable-mbstring \
8--enable-zip \
9--enable-bcmath \
10--enable-ftp \
11--enable-exif \
12--enable-calendar \
13--enable-sockets \
14--enable-sysvmsg \
15--enable-sysvsem \
16--enable-sysvshm \
17--enable-wddx \
18--with-curl \
19--with-mcrypt \
20--with-iconv \
21--with-pspell \
22--with-gd \
23--enable-gd-native-ttf \
24--enable-gd-jis-conv \
25--with-openssl \
26--enable-soap \
27--with-zlib-dir=/usr \
28--with-zlib=/usr \
29--with-bz2=/usr \
30--with-apxs2 \
31--with-mysqli=mysqlnd \
32--with-pdo-mysql=mysqlnd \
33--with-mysql-sock=/var/run/mysqld/mysqld.sock
34$ sudo make -j `nproc`
35$ sudo apt-get remove php*
36$ sudo make install
nprocはそのPC上の最大を表すらしい 知らなかった
おそらくconfigureは前提パッケージを全て入れていれば通るはず
トラブった時は以下のページが参考になった
https://blog.flowl.info/2015/how-to-install-php7-on-ubuntu-or-debian/
各種設定
設定ファイルのコピー
パスを調べてからそこにファイルを配置する
1$ php -i | grep php.ini
2$ sudo cp ./hoge/php-7.0.3/php.ini-production /usr/local/lib/php.ini
1$ vi /usr/local/lib/php.ini
2必要な設定をする
3必要な項目を検索して適宜書き換え
4expose_php = On → Offに
5;date.timezone = → date.timezone = 'Asia/Tokyo'
6;error_log = php_errors.log → error_log = "適当なパス/error.log"//対象ファイルの所有者をdaemonに権限を755にしておく
7mysqli.default_socket = → mysqli.default_socket = "パス"
8pdo_mysql.default_socket = → pdo_mysql.default_socket = "パス"
9display_errors = Off → display_errors = stderr
ソケットファイルの位置は/etc/mysql/my.cnfに書いてあるので環境に合わせる
1$ php -v
2PHP 7.0.3 (cli) (built: Feb 15 2016 16:56:09) ( NTS )
3Copyright (c) 1997-2016 The PHP Group
4Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
インストール出来ていることを確認
Apacheの設定
--with-apxs2の設定をしているため
1$ cat /etc/apache2/mods-available/php7.load
2LoadModule php7_module /usr/lib/apache2/modules/libphp7.so
というファイルが生成されているはず
同じディレクトリにconfファイルを作成する
1$ vi /etc/apache2/mods-available/php7.conf
2SetHandler application/x-httpd-php
一度設定を無効にして再度有効にしてからApacheを再起動する
1$ sudo a2dismod php7
2$ sudo a2enmod php7
3$ sudo service apache2 restart
あとは適当にファイルを作成して
1<?php phpinfo(); ?>
と書いてテスト
MySQLとの接続の確認
1<?php $pdo = new PDO('mysql:dbname=DB名;localhost;charset=utf8', 'ユーザー名', 'パスワード'); ?>
実行してエラーが出ないことを確認する
undefinedだったらコンパイル時のオプション忘れ、No such fileならソケットの位置が怪しいです
以上終わり 半日掛かった
でも引っかかったところ全部メモったから同じ環境の人は特に問題なく出来るはず…
参考サイト
- あぱーブログ Apache HTTP/2+PHP7+MySQL5.7 インストールメモ
- k-holyのPHPとか諸々メモ mysqliのコンストラクタで"No such file or directory"のエラー
- Qiita CentOS 6 の環境にPHP7をインストールしてApacheで動かすまで
- SOFTEL 【php】MySQLに接続するときにエラー発生
- FLOW How to install PHP7 on Ubuntu or Debian
感想
必要なパッケージを探しコンパイルを通しでめんどくさいのでおとなしく誰かの作ってくれたパッケージを感謝しながら使う方が楽です
使うのが目標ならこの辺を参考にすると良いかも
コンパイルはエラー出るから良いですが既に環境が整えてあるowncloudとかWordpressでエラーが出るのがなかなか困りました
Wordpressはwp-config.phpでdebugをtrueにするとエラーが追いやすいです
owncloudはクライアントで一度ユーザーをログアウトさせてからログインさせるとうまく行きます
メモ
記事内容と重複することもあるがエラー内容とかも兼ねてメモ
configure: error: Cannot find OpenSSL's
openssl-devを入れれば良いと出てくるがRaspberry Piには該当パッケージがなかった
代わりにlibssl-devを入れる
https://www.raspberrypi.org/forums/viewtopic.php?f=33&t=14465
途中でbuild/shtoolのパーミッションがないと怒られた場合
1$ chmod 755 build/shtool
php -v できるがデータベースの接続に失敗する
PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory
mysqlのサービスが立ち上がってるのを確認したあとsockファイルの位置を確認する
1$ php --ri mysqli
2$ php --ri pdo_mysql
php.iniに
1mysqli.default_socket = "パス"
2pdo_mysql.default_socket = "パス"
と記述してからテストする
mysqlはPHP7から無くなったので不要
Apacheもreloadしておく