ソースからPHPをコンパイルする

このページでは、Ubuntuや他のDebianベースのディストリビューション上のソースからPHPを構築する方法を説明します。他のUnixまたはLinuxシステム上でPHPをコンパイルするための基礎として使用できることは間違いありません。

最新バージョンのMoodleは、あなたのバージョンのPHPのパッケージではサポートされていない合理的に新しいバージョンのPHPを必要とするため、これを行う必要があるかもしれません - 特に "長期サポート"バージョン。

この議論はUbuntu 10.04(これを書いている時点では)が最新のUbuntu LTSであることに基づいていました。それはMoodle 2.1用の新しい十分なPHPバージョンを持っていません。


仮定

(特に)PHPがインストールされておらず、Apache Webサーバーもインストールされていない場合は、Ubuntuの基本インストール(この場合は10.04)がインストールされることを想定しています。 PHPを(パッケージとして)インストール済みの場合は、まずそれを削除する必要があります。

sudo apt-get php5を削除します。

Apache Webサーバー

UbuntuパッケージからApacheをインストールするか(推奨)、またはソースからコンパイルすることができます。ソースからのコンパイルは簡単ですが、Ubuntuのパッケージ版とはまったく異なるディレクトリ構造になってしまいます(デフォルト設定を使用)。これについてはここでは詳しく説明しません。

パッケージバージョンをインストールするには、

sudo apt-get apache2をインストールします。apache2-dev

PHPをビルドするには-devパッケージが必要です。

追加のライブラリーを入手する

Moodleはかなりの数のオプションのPHPモジュールを必要とします。これらの多くはPHPがコンパイルされる前に開発ライブラリがシステム上で利用可能であることを必要とします。この点で、PHPをソースから構築するのは難しいです。あなたが挑戦したいのであれば、これらすべてをソースパッケージとしてダウンロードして最初から構築することができますが、パッケージ版を使う方がはるかに簡単です。それらは次のようにインストールされています...

sudo apt-get install \
    libxml2-dev \
    libcurl4-openssl-dev \
    libjpeg-dev \
    libpng-dev \
    libxpm-dev \
    libmysqlclient-dev \
    libpq-dev \
    libicu-dev \
    libfreetype6-dev \
    libldap2-dev \
    libxslt-dev \
    libssl-dev \
    libldb-dev

Linuxでは、次のようにシンボリックリンクを作成する必要があります。

ln -s /usr/lib/x86_64-linux-gnu/libldap.so /usr/lib/libldap.so
ln -s /usr/lib/x86_64-linux-gnu/liblber.so /usr/lib/liblber.so

上記にはMySQLとPostgreSQLデータベースの両方のクライアントが含まれていることに注意してください。両方をインストールしたくないかもしれません。 PHPビルドにさらにオプションを追加する場合は、他のライブラリを含める必要があるかもしれません。あなたのUbuntuのバージョン、機能、そして 'lbrary'や 'development'という単語を含むGoogle検索では、正しいパッケージ名が見つかることがよくあります。

ビルド環境

Ubuntuには、標準インストールに必要なすべてのコンパイラ、リンカ、ライブラリがありません。これまでにソースから何もコンパイルしていない場合は、これを単一のコマンドで修正できます。

sudo apt-getインストールbuild-essential

PHPの入手と構築

最新版はwww.php.netからダウンロードできます。これを書いている時点では、これは7.2.10でしたが、新しいバージョンはかなり定期的に出てきます。これは.tar.gzファイル(例えばphp-7.2.10.tar.gz)としてダウンロードする必要があります。これをあなたのホームフォルダの適当な場所に置き、ファイルを解凍します。

tar -zxvf php-7.xytar.gz
cd php-7.xy 

次のステップは 'configure'プログラムを実行することです。これはあなたのシステムを掘り下げてあなたの特定の設定に基づいて特定のmakeファイルを作成します。また、コンパイルされるすべてのオプションモジュールも指定されています。Moodle2(および1.9)の最小値は以下のとおりです。

./configure \
  --prefix = / usr / local / php \
  --with-apxs2 = / usr / local / apache / bin / apxs \
  --enable-mbstring \
  --with-curl \
  --with-openssl \
  --with-xmlrpc \
  --enable-soap \
  --enable-zip \
  --with-gd \
  --with-jpeg-dir \
  --with-png-dir \
  --with-mysqli \
  --with-pgsql \
  --enable-embedded-mysqli \
  --with-freetype-dir \
  --with-ldap \
  --enable-intl \
  --with-xsl \
  --with-zlib

特別な要件がある場合は、他の人必要な場合あります。あなたがすることができる可能性の完全なリストを得るために...

./configure --help

これはエラーなしで完了し、ボックス内の明白な著作権表示で終了するはずです。エラーが発生した場合は、ライブラリが見つからないことが原因と考えられます。上記のすべてのライブラリを(apt-getで)追加したことを確認してください。それに失敗すると、Googleはあなたの友達です。

この作業が終わったら、実際のコンパイルとリンクを行います。単純に…

作る
これは(あなたのマシンがどれくらい速いかによるが)ある程度の時間がかかり、フレーズで終わるだろう。
ビルド完了

ファイルをインストールするだけの問題です。

sudo make install

注意:PHP_BINDIRはコンパイル時に設定される値です。パスは、configureで使用されているプレフィックスに設定されます(Linuxの同等のもの:./configure --prefix <path>)。

ApacheとPHPの設定

最初のステップは、PHPの設定ファイル(php.ini)をソース配布からApacheの起動時に読み込まれる場所にコピーすることです。本番システム用と開発システム用の2つの提供バージョンがあります。後者はもっと多くのエラーや警告を表示し、その名前が示すように(セキュリティ上の理由から)開発環境でのみ使用されるべきです。選択したファイルをコピーするには、(ソースディレクトリから)次の手順を実行します。

sudo cp php.ini-production /usr/local/lib/php.ini
sudo ln -s /usr/local/lib/php.ini / etc

2行目はオプションで、/ etcのiniファイルへのリンクを作成します(/etc/php.iniにあります)。この時点で、iniファイルを編集してニーズに合わせてカスタマイズすることができます。ファイルアップロードの制限とphp memory_limit設定が非常によくあります。

Apacheの設定ファイルは、PHPファイルを正しく処理するためにいくつかの変更を必要とします。 UbuntuのAPacheの設定は少し変わっていて、それだけで全体の議論になるかもしれません。基本的に、以下の行を追加する必要があります。

LoadModule php5_module modules / libphp5.so
AddTypeアプリケーション/ x-http-php .php
DirectoryIndex index.php index.html

最初の2つは、mods-available / dir.confをチェックし、index.phpがリストに含まれていることを確認することで、/etc/apache2/apache2.confとDirectoryIndexの最後に貼り付けることができます。厳密に言えば、 mods-availableでファイルを作成し、それをa2enmodコマンドで有効にしますが、これは練習問題として残されています。

これが完了したら、Apacheを再起動する必要があります。

sudo /etc/init.d/apache2 restart

テスト

テストする最も簡単な方法は、Webサービスのディレクトリ(/ var / www)のルートに小さなテストファイルを作成し、 test.phpのような名前にすることです。

  <?php
    phpinfo();

それからhttp://hostname.of.your.server/test.phpを使ってWebブラウザからページにアクセスします。あなたはPHPの設定の長いリストを見るべきです(あなたはそれをチェックしたいかもしれません)。 phpコードを見るだけなら、Apache設定の3つの設定は何らかの理由で機能していないので、チェックする必要があります。他のエラーが出た場合は、読んでください...

トラブルシューティング

私がすることができる最もよいアドバイスはログを見ることです。 Apacheのエラーログは/var/log/apache/error.logにあり、最後に最新のエラーが記録されています。常に最初にここを見てください。ほとんどの問題は、不正なファイルまたはディレクトリのアクセス権、あるいはApache構成の誤った設定によって引き起こされます。

PHPを更新する

2つの可能性があります。まず、追加の設定を使用してphpを再構築するか、新しいバージョンのPHPを構築します。あなたはまさにsudo make installまでを含めて、インストールの指示に正確に従うことができます。その後、Apache Webサーバーを再起動するだけで完了です。

新しいバージョンの場合は、古いバージョンと同じ./configureコマンドを使用してください(絶対に機能することは保証されていませんが、非常に可能性が高いです)。完全なコマンドを思い出せない場合は、(古いバージョンでは)ビルドディレクトリのconfig.logというファイルを調べるか、または上記の 'phpinfo'テストを実行すると、configコマンドが一番上に表示されます。

関連情報