kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

PHPのコンパイルってどうやるの?

PHPをいれる際にどういれいているか?

いろいろなやり方がある現在ですが、いろいろな手段をしっていると幅がひろがっていいと思います。

PHPコンパイルを初めて試したとき、yumの利用しやすさを実感したが、試してみたおかげで現在のプロジェクトで活かせています。

一度はやってみると、PHP以外のコンパイルでも活かせるため知識としては便利です。

ちなみに個人的な環境か以下の環境

  • CentOS7 ( Linux )
  • PHP7.1

PHPコンパイル

PHP公式ページ PHP: PHP を手に入れるには - Manual

PHP公式ページ ソースページ PHP: Downloads

Github github.com

とりあえずコンパイルでインストールまでの簡単なコマンドの流れを記載してみます。 実行はスーパーユーザーで実行しています。

cd /usr/local/src
wget http://jp2.php.net/get/php-7.1.9.tar.gz/from/this/mirror -O php-src.tar.gz
tar xzf php-src.tar.gz
cd php-src
./configure
make
make install

PHP7.1.9のインストールを行っています。

.configureにオプションをつけていないため機能的には制限がありすぎるかと。

configure

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

ソースからインストールする利点は必要な機能のみに絞れることなので、configureは重要なコマンドになってきます。

configureオプションで必要な機能を指定したり、コンパイル時のリンクの位置を指定していけます。

phpbrewでいれた個人環境のconfigure

./configure  --prefix=/usr/local/Cellar/php70/7.0.17_9 --localstatedir=/usr/local/var --sysconfdir=/usr/local/etc/php/7.0 --with-config-file-path=/usr/local/etc/php/7.0 --with-config-file-scan-dir=/usr/local/etc/php/7.0/conf.d --mandir=/usr/local/Cellar/php70/7.0.17_9/share/man --enable-bcmath --enable-calendar --enable-dba --enable-exif --enable-ftp --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-shmop --enable-soap --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --enable-zip --with-freetype-dir=/usr/local/opt/freetype --with-gd --with-gettext=/usr/local/opt/gettext --with-iconv-dir=/usr --with-icu-dir=/usr/local/opt/icu4c --with-jpeg-dir=/usr/local/opt/jpeg --with-kerberos=/usr --with-mhash --with-ndbm=/usr --with-png-dir=/usr/local/opt/libpng --with-xmlrpc --with-zlib=/usr --with-readline=/usr/local/opt/readline --without-gmp --without-snmp --with-libxml-dir=/usr/local/opt/libxml2 --with-pdo-odbc=unixODBC,/usr/local/opt/unixodbc --with-unixODBC=/usr/local/opt/unixodbc --with-bz2=/usr --with-openssl=/usr/local/opt/openssl --enable-fpm --with-fpm-user=_www --with-fpm-group=_www --with-curl --with-xsl=/usr --with-ldap --with-ldap-sasl=/usr --with-mysql-sock=/tmp/mysql.sock --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --disable-opcache --enable-pcntl --without-pear --enable-dtrace --disable-phpdbg --enable-zend-signals

長い!!まぁ、機能をしぼってやればもっと短いので、自分のほしいものだけにしぼってコマンドオプションを指定してください。

make

コンパイルです。

makeでエラーが出る場合は、必要なライブラリなどをyumでインストールする必要があるため、エラーがでた場合は内容をしっかり確認しましょう。

エラー文でググれば必要なライブラリが大体出てきます。

コンパイルはかなりCPUを使用するため、AWSなどのクラウド環境でやる場合はいいインスタンスに変えてから実行することをおすすめします。

make install

makeしただけでは、コンパイルが完了しただけでサーバー環境へ反映したわけではありません。

「make install」したタイミングでビルドしたプログラムをインストールしている状態になります。

ここまで行えばインストールしたと判断して問題ないでしょう。

コンパイルできると色々便利

サーバー環境に必要なライブラリがない。パッケージソフトで提供されていない。場合とかは自分でコンパイルして利用することが可能です。

PHP7に変更して壁にぶち当たったため、ちょっと書いてみたい記事でした。

たぶん調べるともっといい記事はいっぱいありますので、いろいろ見てもらったほうが知見が広がると思います。