📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の43版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
RHELやSUSEの標準リポジトリにあるPHPのバージョンは古いことが多い。<br>
PHPは1995年にRasmus Lerdorfによって開発された主にWebアプリケーション開発のために設計されたプログラミング言語である。<br>
また、PHP 7以降は大幅な改良がされており、実行速度をはじめ様々なものがアップデートされているので、特別な事情がない限りはアップグレードした方がよい。<br>
当初は「Personal Home Page」の略称であったが、現在は「PHP: Hypertext Preprocessor」という再帰的な頭字語として知られている。<br>
<br>
PHPの最も重要な特徴は、HTMLに直接埋め込むことができることである。<br>
<syntaxhighlight lang="html">
<html>
  <body>
    <?php
      echo "Hello, World!";
    ?>
  </body>
</html>
</syntaxhighlight>
<br>
また、PHPはサーバサイドで動作する言語である。<br>
つまり、Webブラウザからリクエストが来る時、サーバ上でPHPコードが実行されてその結果生成されたHTMLがWebブラウザに送信される。<br>
この特性により、データベース操作やファイル処理等、サーバ側での複雑な処理を実現できる。<br>
<br>
PHPの強みとして、豊富な標準ライブラリがある。<br>
データベース接続、文字列処理、ファイル操作、画像処理等、Web開発に必要な機能の多くが標準で提供されている。<br>
特にMySQL等のデータベースとの連携が容易であり、多くのWebサイトやアプリケーションの開発に利用されている。<br>
<br>
フレームワークの面では、LaravelやSymfonyといった強力なフレームワークが存在しており、より効率的な開発を可能にしている。<br>
これらのフレームワークは、セキュリティ、パフォーマンス、保守性等の面で優れた機能を提供する。<br>
<br>
PHPの学習曲線は比較的緩やかで、初心者にも取り組みやすい言語である。<br>
基本的な文法は他の主要なプログラミング言語と似ており、特にC言語やJavaの経験がある方には馴染みやすい。<br>
<br>
セキュリティに関しては、最新のPHPバージョンでは多くの改善が行われている。<br>
ただし、開発者自身がセキュリティベストプラクティスを理解して、適切に実装することが重要である。<br>
例えばSQLインジェクションやクロスサイトスクリプティング (XSS) への対策は、必須の知識となる。<br>
<br>
<br>
Raspberry Piにおいて、ここでは、外部リポジトリとしてpackages.sury.org/phpを使用しているが、<br>
PHPは継続的に進化を続けており、現在のPHP 8系では、JITコンパイラの導入や型システムの強化等、パフォーマンスと開発体験の向上が図られている。<br>
このリポジトリを使用しても、常に最新版のPHPになる訳ではないことに注意すること。<br>
これにより、より堅牢で高速なアプリケーション開発が可能になっている。<br>
<br><br>
<br><br>


22行目: 51行目:
<br>
<br>
==== SUSE ====
==== SUSE ====
* PHP 7をインストールする場合 (パッケージ管理システムのみ)
===== PHP 7をインストールする場合 (パッケージ管理システムのみ) =====
*: PHPおよび主要なPHPモジュールをインストールする。
PHPおよび主要なPHPモジュールをインストールする。<br>
*: <code>sudo zypper install php7 php apache2-mod_php7 php7-curl php7-xmlreader php7-zip php7-pdo php7-gd php7-json php7-mysql php7-mbstring \</code>
sudo zypper install php7 php apache2-mod_php7 php7-curl php7-xmlreader php7-zip php7-pdo php7-gd php7-json php7-mysql php7-mbstring \
*: <code>                    php7-openssl php7-pecl php7-devel php7-fpm php7-fileinfo php7-phar</code>
                    php7-openssl php7-pecl php7-devel php7-fpm php7-fileinfo php7-phar
<br>
===== PHP 8をインストールする場合 =====
* パッケージ管理システムからインストール
*: <syntaxhighlight lang="text">
sudo zypper install php8 php8-devel php8-curl php8-zip php8-mbstring php8-fileinfo php8-gd \
                    php8-mysql php8-fpm apache2-mod_php8
</syntaxhighlight>
*: <br>
*: <br>
* PHP 8をインストールする場合
* リポジトリを追加してインストール
** パッケージ管理システムからインストール
*: まず、Develリポジトリを追加する。
**: <code>sudo zypper install php8 apache2-mod_php8 php8-curl php8-xmlreader php8-zip php8-pdo php8-gd php8-json php8-mysql php8-mbstring \</code>
*: <syntaxhighlight lang="text">
**: <code>                   php8-openssl php8-devel php8-fpm php8-fileinfo php8-phar</code>
# SLE 15 SP7 〜 SLE 16
sudo zypper ar 'http://download.opensuse.org/repositories/devel:/languages:/php/$releasever/' PHP
# SLE 15 SP6
sudo zypper ar http://download.opensuse.org/repositories/devel:/languages:/php/SLE_15_SP6/ PHP
# SLE 15 SP5
sudo zypper ar http://download.opensuse.org/repositories/devel:/languages:/php/SLE_15_SP5/ PHP
# openSUSE Leap 16.0
sudo zypper ar 'http://download.opensuse.org/repositories/devel:/languages:/php/$releasever/' PHP
# openSUSE Leap 15.6
sudo zypper ar http://download.opensuse.org/repositories/devel:/languages:/php/openSUSE_Leap_15.6/ PHP
</syntaxhighlight>
*: <br>
*: Develリポジトリの優先度を高く設定する。
*: <pre>sudo zypper mr -p 90 PHP</pre>
*: <br>
*: リポジトリを更新する。
*: Develリポジトリを初めて使用する場合、GPGキーを受け入れるように求められる。
*: <pre>sudo zypper refresh</pre>
*: <br>
*: <br>
** リポジトリを追加してインストール
*: PHP 8をインストールする。
**: まず、Develリポジトリを追加する。
*: <syntaxhighlight lang="text">
**: SLE 15 SP5 : <code>sudo zypper ar http://download.opensuse.org/repositories/devel:/languages:/php/SLE_15_SP5/ PHP</code>
sudo zypper install php8 apache2-mod_php8 php8-curl php8-xmlreader php8-zip php8-pdo php8-gd php8-json php8-mysql php8-mbstring \
**: SLE 15 SP4 : <code>sudo zypper ar http://download.opensuse.org/repositories/devel:/languages:/php/SLE_15_SP4/ PHP</code>
                    php8-openssl php8-devel php8-fpm php8-fileinfo php8-phar
**: SLE 15 SP3 : <code>sudo zypper ar http://download.opensuse.org/repositories/devel:/languages:/php/SLE_15_SP3/ PHP</code>
</syntaxhighlight>
**: <br>
<br>
**: Develリポジトリの優先度を高く設定する。
SUSEのデフォルトのPHP-FPMは、<code>--with-fpm-user=wwwrun</code> オプション と <code>--with-fpm-group=www</code> オプションを付加してコンパイルされている。<br>
**: <code>sudo zypper mr -p 90 PHP</code>
<u>したがって、ユーザ名がwwwrun、グループ名がwwwであることに注意する。</u><br>
**: <br>
**: リポジトリを更新する。
**: Develリポジトリを初めて使用する場合、GPGキーを受け入れるように求められる。
**: <code>sudo zypper refresh</code>
**: <br>
**: PHP 8をインストールする。
**: <code>sudo zypper install php8 apache2-mod_php8 php8-curl php8-xmlreader php8-zip php8-pdo php8-gd php8-json php8-mysql php8-mbstring \</code>
**: <code>                    php8-openssl php8-devel php8-fpm php8-fileinfo php8-phar</code>
<br>
<br>


==== Raspberry Pi ====
==== Raspberry Pi ====
===== 標準リポジトリ =====
パッケージリストの更新を行う。<br>
sudo apt update
<br>
外部リポジトリからインストール可能なPHPパッケージの情報を確認する。<br>
sudo apt-cache policy php
<br>
PHPおよび主要なPHPモジュールをインストールする。<br>
# PHP 8 (Trixie)
sudo apt install php8.4 php8.4-cli php8.4-mysql php8.4-mbstring php8.4-gd php8.4-zip php8.4-xml php8.4-common php8.4-curl php8.4-intl
# PHP 8 (Bookworm)
sudo apt install php8.2 php8.2-cli php8.2-mysql php8.2-mbstring php8.2-gd php8.2-zip php8.2-xml php8.2-common php8.2-curl php8.2-intl
# PHP 7 (Bullseye)
sudo apt install php7.4 php7.4-cli php7.4-mysql php7.4-mbstring php7.4-gd php7.4-zip php7.4-xml php7.4-common php7.4-curl php7.4-intl
<br>
===== packages.sury.orgリポジトリの使用 =====
packages.sury.orgリポジトリとは、Ondřej Surý氏が管理する非公式のPHPパッケージリポジトリである。<br>
<br>
* Debian / Ubuntu / Raspberry Pi OS向けに、最新版のPHPや複数バージョンのPHPを提供
* 公式リポジトリよりも新しいバージョンやサポート期間が終了したバージョンも利用可能
* PHP関連の拡張モジュールも豊富に提供
<br>
公式リポジトリに含まれていない新しいPHPバージョンが必要な場合、複数のPHPバージョンを共存させる場合、特定のバージョンのPHPが必要な場合には、packages.sury.orgの利用が有効である。<br>
<br>
まず、lsb-releaseをインストールする。<br>
まず、lsb-releaseをインストールする。<br>
  sudo apt-get install lsb-release
  sudo apt install lsb-release
<br>
<br>
packages.sury.orgからPHPのGPGキーを登録するため、以下のコマンドを実行する。<br>
packages.sury.orgからPHPのGPGキーを登録する。<br>
  wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
  wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
<br>
<br>
60行目: 135行目:
  echo "deb https://packages.sury.org/php/ `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/php.list
  echo "deb https://packages.sury.org/php/ `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/php.list
<br>
<br>
パッケージリストの更新を行う。<br>
# PHP 8.4
  sudo apt-get update
  sudo apt install php8.4 php8.4-cli php8.4-mysql php8.4-mbstring php8.4-gd php8.4-zip php8.4-xml php8.4-common php8.4-curl php8.4-intl
<br>
   
外部リポジトリからインストール可能なPHPパッケージの情報を確認するため、以下のコマンドを実行する。<br>
  # PHP 8.2
  sudo apt-cache policy php
  sudo apt install php8.2 php8.2-cli php8.2-mysql php8.2-mbstring php8.2-gd php8.2-zip php8.2-xml php8.2-common php8.2-curl php8.2-intl
<br>
PHP 7および主要なPHPモジュールをインストールするため、以下のコマンドを実行する。<br>
  # PHP 7.3
  sudo apt-get install php7.3 php7.3-fpm php7.3-mysql php7.3-mbstring php7.3-gd php7.3-zip php7.3-xml php7.3-common php7.3-curl php7.3-intl php-acpu
   
   
  # PHP 7.4
  # PHP 7.4
  sudo apt-get install php7.4 php7.4-cli php7.4-mysql php7.4-mbstring php7.4-gd php7.4-zip php7.4-xml php7.4-common php7.4-curl php7.4-intl
  sudo apt install php7.4 php7.4-cli php7.4-mysql php7.4-mbstring php7.4-gd php7.4-zip php7.4-xml php7.4-common php7.4-curl php7.4-intl
<br><br>
<br><br>


== PHPのインストール (ソースコードからインストールする場合) ==
== PHPのインストール (ソースコードからインストールする場合) ==
複数のPHPのバージョンをインストールする場合、ソースコードからインストールする方が融通が利く。<br>
==== c-clientライブラリのインストール (非推奨) ====
c-clientライブラリのビルドに必要なライブラリをインストールする。<br>
# RHEL
sudo dnf install make gcc openssl-devel pam-devel krb5-devel libksba-devel
# SUSE
sudo zypper install make gcc openssl-devel pam-devel krb5-devel libksba-devel
<br>
c-clientライブラリのソースコードをダウンロードする。<br>
git clone https://github.com/uw-imap/imap
cd imap
<br>
c-clientライブラリをビルドおよびインストールする。<br>
# OpenSSLをサポートする場合、かつ、PAMモジュールを使用する場合
make -j $(nproc) lnp SSLTYPE=unix
make install
# OpenSSLをサポートしない場合、かつ、PAMモジュールを使用する場合
make -j $(nproc) lnp
make install
# OpenSSLをサポートしない場合、かつ、PAMモジュールを使用しない場合
make -j $(nproc)
make install
<br>
c-clientライブラリのシンボリックリンクを作成する。<br>
ln -s /<IMAPのインストールディレクトリ>/lib/c-client.a \
      /<IMAPのインストールディレクトリ>/lib/libc-client.a
<br>
~/.profileファイル等に、c-clientライブラリのパスを設定する。<br>
vi ~/.profile
<br>
<syntaxhighlight lang="sh">
# ~/.profileファイル
export LD_LIBRARY_PATH="/<c-clientライブラリのインストールディレクトリ>/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="$(pkg-config --variable pc_path pkg-config)"
export PKG_CONFIG_PATH="/<c-clientライブラリのインストールディレクトリ>/lib/pkgconfig:${PKG_CONFIG_PATH}"
</syntaxhighlight>
<br>
 
==== PHPのインストール ====
RHELやSUSEの標準リポジトリにあるPHPのバージョンは古いことが多い。<br>
また、PHP 7以降は大幅な改良がされており、実行速度をはじめ様々なものがアップデートされているので、特別な事情がない限りはアップグレードした方がよい。<br>
<br>
Raspberry Piにおいて、ここでは、外部リポジトリとしてpackages.sury.org/phpを使用しているが、<br>
このリポジトリを使用しても、常に最新版のPHPになる訳ではないことに注意すること。<br>
<br>
また、複数のPHPのバージョンをインストールする場合、ソースコードからインストールする方が融通が利く。<br>
<br>
<br>
PHPのビルドに必要なライブラリをインストールする。<br>
PHPのビルドに必要なライブラリをインストールする。<br>
  sudo zypper install make gcc gcc-c++ ccache re2c gmp-devel zlib-devel libzip-devel pcre-devel gd-devel       \
  sudo zypper install make gcc gcc-c++ ccache re2c gmp-devel pcre-devel pcre2-devel zlib-devel libzip-devel \
                     readline-devel libcurl-devel icu libicu-devel libxml2-devel freetype2-devel enchant-devel \
                     readline-devel libcurl-devel gd-devel libxml2-devel freetype2-devel enchant-devel     \
                     libjpeg62-devel libpng16-devel libwebp-devel libavif-devel libffi-devel                   \
                     libjpeg62-devel libpng16-devel libwebp-devel libavif-devel libffi-devel               \
                     libXpm-devel libXft-devel libxslt-devel oniguruma-devel libsodium-devel libtidy-devel     \
                     libXpm-devel libXft-devel libxslt-devel oniguruma-devel libsodium-devel libtidy-devel \
                     libopenssl-1_1-devel krb5-server krb5-devel libc-client2007e_suse imap imap-devel         \
                     krb5-server krb5-devel imap imap-devel cyrus-sasl-devel                              \
                     sqlite3-devel   \
                    libedit-devel libcapstone-devel libxslt-devel argon2-devel icu libicu-devel          \
                     unixODBC-devel   \
                    systemd-devel        \
                     libmariadb-devel \
                    libopenssl-1_1-devel \  # OpenSSL 1 を使用する場合
                     libmysqld-devel \
                    libopenssl-3-devel  \  # OpenSSL 3 を使用する場合
                     lmdb-devel       \  # BtreeベースのDBMSを使用する場合
                     sqlite3-devel       \
                     postgresql-devel   # PostgreSQLを使用する場合
                     unixODBC-devel       \
                     valgrind-devel     # Valgrind (メモリリーク検知機能) を有効にする場合
                     libmariadb-devel     \
                     aspell-devel       # GNU ASpellを使用する場合
                     libmysqld-devel     \
                     lmdb-devel           \  # BtreeベースのDBMSを使用する場合
                     postgresql-devel       # PostgreSQLを使用する場合
                    libfbclient-devel      # Firebirdを使用する場合
                     valgrind-devel         # Valgrind (メモリリーク検知機能) を有効にする場合
                     aspell-devel           # GNU ASpellを使用する場合
                    libc-client2007e_suse  # SUSE 15.5以前 (SUSE 15.6以降では、このパッケージは無くなっているため)
<br>
<br>
[https://www.php.net/downloads.php PHPの公式Webサイト]にアクセスして、PHPのソースコードをダウンロードする。<br>
[https://www.php.net/downloads.php PHPの公式Webサイト]にアクセスして、PHPのソースコードをダウンロードする。<br>
105行目: 231行目:
               --enable-bcmath --enable-calendar --enable-cgi --enable-cli --enable-exif --enable-ftp --enable-fpm    \
               --enable-bcmath --enable-calendar --enable-cgi --enable-cli --enable-exif --enable-ftp --enable-fpm    \
               --enable-gd --enable-gd-jis-conv --enable-inifile --enable-intl --enable-mbregex --enable-mbstring      \
               --enable-gd --enable-gd-jis-conv --enable-inifile --enable-intl --enable-mbregex --enable-mbstring      \
               --enable-mysqlnd --enable-opcache --enable-phpdbg --enable-phpdbg-debug --enable-sockets --with-enchant \
               --enable-mysqlnd --enable-phpdbg --enable-phpdbg-debug --enable-sockets --with-enchant \
               --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-shmop --enable-soap --enable-zts            \
               --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-shmop --enable-soap --enable-zts            \
              --enable-opcache          \  # PHP 8.4以前
               --with-curl --with-expat -with-freetype --with-gettext --with-gmp --with-iconv --with-jpeg --with-avif --with-ffi \
               --with-curl --with-expat -with-freetype --with-gettext --with-gmp --with-iconv --with-jpeg --with-avif --with-ffi \
               --with-openssl --with-imap --with-imap-ssl --with-kerberos --with-mhash \
               --with-openssl --with-mhash \
               --with-readline --with-sodium --with-tidy --with-xpm                    \
               --with-readline --with-sodium --with-tidy --with-xpm                    \
               --with-zlib --with-zip --with-libxml --with-xsl --with-ldap --with-pic  \
               --with-zlib --with-zip --with-libxml --with-xsl --with-ldap --with-pic  \
               --with-libdir=lib64                              \
               --with-fpm-systemd        \
              --with-apxs2=/<Apacheのインストールディレクトリ>/bin/apxs \
               --with-unixODBC=shared    \
               --with-unixODBC=shared    \
               --with-mysql-sock        \
               --with-mysql-sock        \
120行目: 246行目:
               --with-pdo-pgsql          \  # PostgresSQLを使用する場合
               --with-pdo-pgsql          \  # PostgresSQLを使用する場合
               --with-lmdb              \  # BtreeベースのDBMSを使用する場合
               --with-lmdb              \  # BtreeベースのDBMSを使用する場合
               --with-config-file-path=<php.iniファイルの配置するパス> # ユーザが指定する場合
               --with-pdo-firebird      \ # Firebirdを使用する場合
               --with-pear              \
               --with-pear              \
              --with-pspell            \  # GNU ASpellを有効にする場合
               --with-valgrind          \  # Valgrind (メモリリーク検知機能) を有効にする場合
               --with-valgrind          \  # Valgrind (メモリリーク検知機能) を有効にする場合
               --with-mcrypt               # PHP 8.3以降は不要
              --with-imap-ssl          \  # PHP 8.4以降は不要
              --with-kerberos          \  # PHP 8.4以降は不要
              --with-pspell            \  # PHP 8.4以前 : GNU ASpellを有効にする場合
              --with-imap              \  # SUSE 15.5以前 (IMAPライブラリを使用する場合)
              --without-imap            \  # PHP 8.4以降は不要
                                          # Composer経由で利用できるメールライブラリが多数存在するため、システムのIMAPライブラリは不要
               --with-mcrypt             \  # PHP 7.2以降は削除されたため不要
              --with-libdir=lib64                              \
              --with-apxs2=/<Apacheのインストールディレクトリ>/bin/apxs \
              --with-config-file-path=<php.iniファイルの配置するディレクトリのパス  例: /opt/PHP/etc> \  # ユーザが指定する場合
              --with-fpm-user=<PHP-FPMを実行するユーザ名>          \  # オプション
              --with-fpm-group=<PHP-FPMを実行するグループ名>          # オプション
   
   
  make -j $(nproc)
  make -j $(nproc)
130行目: 266行目:
<br>
<br>
PHPの実行に必要なライブラリをインストールする。<br>
PHPの実行に必要なライブラリをインストールする。<br>
  sudo zypper install libc-client2007e_suse libonig4 libpq5
# SUSE
  sudo zypper install libonig4
                    libpq5                # PostgresSQLを使用する場合
                    libaspell15            # GNU ASpellを使用する場合
                    libc-client2007e_suse # SUSE 15.5以前
 
<br>
<br>
~/.profileファイル等に環境変数の設定を追記する。<br>
~/.profileファイル等に、環境変数<code>PATH</code>を追記する。<br>
  vi ~/.profile
  vi ~/.profile
<br>
<br>
141行目: 282行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== Apache2を使用する場合 ====
Apache2を使用する場合、Apache2の設定ファイルであるhttpd.confファイルを編集して、phpファイルを実行できるように設定する。<br>
Apache2を使用する場合、Apache2の設定ファイルであるhttpd.confファイルを編集して、phpファイルを実行できるように設定する。<br>
  vi /<Apacheの設定ファイルがあるディレクトリ>/conf/httpd.conf
  vi /<Apacheの設定ファイルがあるディレクトリ>/conf/httpd.conf
159行目: 302行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
次に、php.iniファイルを配置する。<br>
==== PHPの設定 ====
php.iniファイルの標準パスは、/<PHPのインストールディレクトリ>/lib64ディレクトリである。
次に、PHPの設定ファイルであるphp.iniファイルを設定する。<br>
<code>configure</code>スクリプト実行時に<code>--with-config-file-path=</code>オプションを指定することにより、php.iniファイルを配置するパスが変更できる。<br>
php.iniファイルのデフォルトのパスは、/<PHPのインストールディレクトリ>/lib64ディレクトリである。<br>
<br>
なお、<code>php --ini</code>コマンドを実行することにより、php.iniファイルを配置するパスが表示される。<br>
なお、<code>php --ini</code>コマンドを実行することにより、php.iniファイルを配置するパスが表示される。<br>
<br>
<code>configure</code>スクリプト実行時に<code>--with-config-file-path=</code>オプションを指定することにより、php.iniファイルを配置するパスを変更することができる。<br>
<br>
<br>
php.iniファイルは、ダウンロードしたPHPのソースコードのトップディレクトリに存在するため、これをコピーする。<br>
php.iniファイルは、ダウンロードしたPHPのソースコードのトップディレクトリに存在するため、これをコピーする。<br>
  cp /<PHPのソースコードがあるディレクトリ>/php.ini-development /<PHPのインストールディレクトリ>/lib64
  cp /<PHPのソースコードがあるディレクトリ>/php.ini-development /<PHPのインストールディレクトリ>/lib64
<br>
<br>
PHP-FPMの設定を行う。<br>
==== PHP-FPMの全体の設定 ====
PHP-FPMを使用する場合、ソケットファイルが配置されるディレクトリを作成する。<br>
mkdir -p /<PHPのインストールディレクトリ>/var/run/php-fpm
<br>
これは、<code>configure</code>スクリプトの実行時に、<code>--enable-fpm</code>オプションを指定した場合、PHP-FPMライブラリがインストールされる。<br>
これは、<code>configure</code>スクリプトの実行時に、<code>--enable-fpm</code>オプションを指定した場合、PHP-FPMライブラリがインストールされる。<br>
まず、php-fpm.confファイルを作成する。<br>
まず、php-fpm.confファイルを作成する。<br>
187行目: 336行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
Webアプリケーションを使用する場合、PHP-FPMのwww.confファイルを作成する。
==== PHP-FPMのプール設定 ====
PHP-FPMを実行するには、使用するユーザアカウントを設定する必要がある。適切なアカウントを使用しないと、パーミッションエラーが発生する可能性がある。<br>
Webアプリケーションを使用する場合、PHP-FPMのプール設定ファイルであるwww.confファイルを作成する。<br>
PHP-FPMを実行するには、使用するユーザアカウントを設定する必要がある。<br>
<br>
適切なアカウントを使用しない場合は、パーミッションエラーが発生する可能性がある。<br>
<br>
また、使用するアカウントは、OSやWebサーバによって異なる。<br>
<br>
<br>
使用するアカウントは、OSやWebサーバによって異なる。<br>
例えば、NginXの場合、デフォルトの設定では<u>nginx</u>という名前のアカウントを使用する。 (ソースコードからインストールしている場合、オプションを付加して変更することができる)<br>
例えば、NginXの場合、<u>nginx</u>というアカウントを使用する。<br>
Apache2の場合、SUSEでは<u>wwwrun</u>、Ubuntu / Debianでは<u>www-data</u>、RHELでは<u>nobody</u>を使用する。<br>
Apache2の場合、SUSEでは<u>wwwrun</u>、Ubuntu / Debianでは<u>www-data</u>、RHELでは<u>nobody</u>を使用する。<br>
<br>
<br>
以下の設定例は、NginXが動作するサーバでの設定である。<br>
以下の設定例は、NginXを使用したサーバの設定である。<br>
  cd /<PHPのインストールディレクトリ>/etc/php-fpm.d
  cd /<PHPのインストールディレクトリ>/etc/php-fpm.d
  cp www.conf.default www.conf
  cp www.conf.default www.conf
209行目: 362行目:
  group = <グループ名  例. nginx>
  group = <グループ名  例. nginx>
   
   
; Unixドメインソケット (例: unix:/var/run/php-fpm/php-fpm.sock) を使用している場合は、
; listen.owner、listen.group、listen.modeも設定する
  listen.owner = <ユーザ名  例. nginx>
  listen.owner = <ユーザ名  例. nginx>
  listen.group = <グループ名  例. nginx>
  listen.group = <グループ名  例. nginx>
listen.mode  = 0660
   
   
  ; 通信方法の設定
  ; 通信方法の設定
  ; nginx.confファイルにおいても、同様の設定を行う必要がある (NginXの設定は、インストール - NginXのページを参照すること)
  ; nginx.confファイルにおいても、同様の設定を行う必要がある (NginXの設定は、インストール - NginXのページを参照すること)
  listen = <TCPまたはUnixドメインソケット>
  listen = <TCPまたはUnixドメインソケット>
           ;例1. TCPを使用する場合�: 127.0.0.1:9000
           ;例1. TCPを使用する場合 : 127.0.0.1:9000
           ;例2. Unixドメインソケットを使用する場合 : /var/run/php-fpm/php-fpm.sock
           ;例2. Unixドメインソケットを使用する場合 : /var/run/php-fpm/php-fpm.sock
   
   
224行目: 380行目:
   
   
  ; PHP-FPM実行時のエラーログ
  ; PHP-FPM実行時のエラーログ
  php_admin_value[error_log] = /var/log/php-fpm/www.log
  php_admin_value[error_log] = <PHP-FPMのプール設定向けログファイルのパス  例: /var/log/php-fpm/www.log>
  php_admin_flag[log_errors] = on
  php_admin_flag[log_errors] = on
  php_admin_value[memory_limit] = 32M
  php_admin_value[memory_limit] = 32M
232行目: 388行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
アクセスファイルやログのパスを作成する。<br>
必要ならば、PHP-FPMのアクセスファイルやログファイルを配置するディレクトリパスを変更または作成する。<br>
初期設定のパスは、PHPのインストールディレクトリとなる。<br>
なお、<u>デフォルトの設定では、ログディレクトリのパスはPHPのインストールディレクトリ下にあるvar/log/php-fpm.logである。</u><br>
  mkdir /var/log/php-fpm
  sudo mkdir /var/log/php-fpm
  chown <上記で設定したユーザ名>:<上記で設定したグループ名> /var/log/php-fpm
  sudo chown <上記で設定したユーザ名>:<上記で設定したグループ名> /var/log/php-fpm
   
   
  mkdir /var/run/php-fpm
  sudo mkdir /var/run/php-fpm
  chown <上記で設定したユーザ名>:<上記で設定したグループ名> /var/run/php-fpm
  sudo chown -R <上記で設定したユーザ名>:<上記で設定したグループ名> /var/run/php-fpm
<br>
<br>
PHP FPMを使用する場合、/etc/systemcd/systemディレクトリにSystemdサービスユニットを作成する。<br>
 
==== PHP-FPMのSystemdサービスユニットの作成 ====
PHP-FPMを使用する場合は、/etc/systemcd/systemディレクトリにSystemdサービスユニットを作成する。<br>
  sudo vi /etc/systemcd/system/php-fpm.service
  sudo vi /etc/systemcd/system/php-fpm.service
<br>
<br>
255行目: 413行目:
   
   
  [Service]
  [Service]
#Type=notify
  Type=simple
  Type=simple
  ExecStart=/<PHPのインストールディレクトリ>/sbin/php-fpm --nodaemonize --fpm-config /<PHPのインストールディレクトリ>/etc/php-fpm.conf
  ExecStart=/<PHPのインストールディレクトリ>/sbin/php-fpm --nodaemonize --fpm-config /<PHPのインストールディレクトリ>/etc/php-fpm.conf
299行目: 456行目:
  WantedBy=multi-user.target
  WantedBy=multi-user.target
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
== PHP-FPMの設定ファイルとは ==
PHP-FPM (FastCGI Process Manager) は、PHPのFastCGI実装であり、WebサーバとPHPプロセスの間で通信を行う。<br>
PHP-FPMの設定は、主に2つのファイルで管理される。<br>
* php-fpm.conf : PHP-FPMの全体的な設定
*: php-fpm.confファイルは、PHP-FPM全体の設定を管理する。
*: <br>
*: 例えば、プロセスの挙動、ログの場所、マスタープロセスの設定等が含まれる。
*: php-fpm.confファイルは、PHP-FPMのコアの設定を定義するため、複数のプール (ポート番号、ユーザ、グループの指定等) を定義するための基本的な設定が含まれている。
*: <br>
* www.conf : PHP-FPMの各プールごとの設定
*: www.confファイルは、プールごとの設定を管理する。
*: 各プールは、異なるWebサイトやアプリケーションのために異なる設定を持つことができる。
*: <br>
*: www.confファイルでは、各プールに対する特定の設定 (プロセス数、ユーザ、グループ、ソケット、ポートの設定等) が指定される。
*: 各プールは異なる設定を持つことができ、これにより異なるWebサイトやアプリケーションをホストする時に、それぞれの要件に合わせて調整できる。
*: <br>
*: 簡単に言えば、php-fpm.confファイルは全体のPHP-FPMの基本的な設定を管理して、www.confファイルは個別のプール (Webサイトやアプリケーションごとに異なる) の設定を管理する。
*: <br>
*: これにより、異なるプールが異なる要件に合わせて調整され、柔軟性が向上する。
<br><br>
<br><br>


331行目: 509行目:
PHP7をインストールする前に、以下のコマンドを実行してlibargon2をインストールする。<br>
PHP7をインストールする前に、以下のコマンドを実行してlibargon2をインストールする。<br>
  sudo dnf --disablerepo=* --enablerepo=epel install libargon2
  sudo dnf --disablerepo=* --enablerepo=epel install libargon2
<br><br>
== php.iniファイルのパス ==
phpコマンドの-i / --iniオプションを付加する。<br>
php -i | grep php.ini または php --ini | grep php.ini
# 出力例
Configuration File (php.ini) Path => /home/user/InstallSoftware/PHP/PHP_8_3/lib
Loaded Configuration File => /home/user/InstallSoftware/PHP/PHP_8_3/lib/php.ini
<br>
phpinfo関数を使用する。<br>
php -r "echo phpinfo();" | grep "php.ini"
# 出力例
Configuration File (php.ini) Path => /home/user/InstallSoftware/PHP/PHP_8_3/lib
Loaded Configuration File => /home/user/InstallSoftware/PHP/PHP_8_3/lib/php.ini
<br>
<br><br>
<br><br>


== 複数のバージョンのPHP-FPM ==
== 複数のバージョンのPHP-FPM ==
PHP-FPMを使用する場合に限り、複数のバージョンのPHPをインストールしてApacheで動作することができる。<br>
PHP-FPMを使用する場合に限り、複数のバージョンのPHPをインストールしてApache2 / Nginxで動作することができる。<br>
<br>
<br>
1つのPHPのバージョンを標準として設定しておき、仮想ホストにおいて他のPHPのバージョンを実行することができる。<br>
あらかじめ、1つのPHPのバージョンを標準として設定しておき、仮想ホストにおいて他のPHPのバージョンを実行することができる。<br>
これは、PHPベースのソフトウェアが特定のバージョンを必要とする場合や最新版のPHPとの互換性が無い場合に必要となる。<br>
これは、PHPベースのソフトウェアが特定のバージョンを必要とする場合や最新版のPHPとの互換性が無い場合に必要となる。<br>
<br>
<br>
==== Apache2の場合 ====
以下の例では、複数のバージョンのPHPを同時に実行している。<br>
以下の例では、複数のバージョンのPHPを同時に実行している。<br>
<br>
<br>
まず、複数のバージョンのPHP-FPMをインストールする。(例えば、PHP 7.2とPHP 7.4)<br>
まず、複数のバージョンのPHP-FPMをインストールする。<br>
以下の例では、PHP 7.2とPHP 7.4としている、<br>
  sudo apt-get install php7.2-fpm php7.4-fpm
  sudo apt-get install php7.2-fpm php7.4-fpm
<br>
<br>
361行目: 558行目:
     </FilesMatch>
     </FilesMatch>
  </VirtualHost>
  </VirtualHost>
<br>
==== NginXの場合 ====
まず、FastCGIプロセスのユーザおよびグループを設定する。<br>
# パッケージ管理システムからPHPをインストールしている場合
# 以下の例では、RHELにおいてPHP 8.3とPHP 7.4をインストールしている
sudo vi /etc/opt/remi/php83/php-fpm.d/www.conf
sudo vi /etc/opt/remi/php74/php-fpm.d/www.conf
# 任意のディレクトリにPHPをインストールしている場合
vi /<PHPのインストールディレクトリ 1>/etc/php-fpm.d/www.conf
vi /<PHPのインストールディレクトリ 2>/etc/php-fpm.d/www.conf
<br>
<syntaxhighlight lang="ini">
user = <NginXが稼働しているユーザ名  例: nginx>
group = <NginXが稼働しているグループ名  例: nginx>
</syntaxhighlight>
<br>
次に、各バージョンのPHP-FPMのプール設定ファイルにおいて、ListenパラメータをFastCGI要求を受信するアドレスとポートを定義する。<br>
# パッケージ管理システムからPHPをインストールしている場合
# 以下の例では、RHELにおいてPHP 8.3とPHP 7.4をインストールしている
sudo vi /etc/opt/remi/php83/php-fpm.d/www.conf
sudo vi /etc/opt/remi/php74/php-fpm.d/www.conf
# 任意のディレクトリにPHPをインストールしている場合
vi /<PHPのインストールディレクトリ 1>/etc/php-fpm.d/www.conf
vi /<PHPのインストールディレクトリ 2>/etc/php-fpm.d/www.conf
<br>
<syntaxhighlight lang="ini">
# www.confファイル (例: PHP-FPM 8.3)
listen = <IPアドレス または ホスト名  例: 127.0.0.1>:<ポート番号  例: 9000>
; または
listen = <PHP-FPMのソケットファイルのフルパス  例: /var/run/php-fpm/php-fpm83.sock> </syntaxhighlight>
<br>
<syntaxhighlight lang="ini">
# www.confファイル (例: PHP-FPM 7.4)
listen = <IPアドレス または ホスト名  例: 127.0.0.1>:<ポート番号  例: 9001>
; または
listen = <PHP-FPMのソケットファイルのフルパス  例: /var/run/php-fpm/php-fpm74.sock> </syntaxhighlight>
<br>
NginXがWebサイトへのリクエスト処理を決定するため、NginXの仮想ホスト向けサーバブロック設定ファイルを編集する。<br>
<syntaxhighlight lang="nginx">
# NginXのサーバブロック設定ファイル (仮想ホスト 1)  例: PHP 8.3向け
server {
    # ...略
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
      root        /srv/www/htdocs/example1.com/;
      fastcgi_pass <IPアドレス または ホスト名 または PHP-FPMのソケットファイルのフルパス>;
                    # 例1: <127.0.0.1>:<ポート番号  例: 9000>
                    # 例2: unix:/<PHPのインストールディレクトリ 1>/var/run/php-fpm/php-fpm.sock;
                    # 例3: unix:/var/run/php-fpm/php-fpm83.sock;
     
      # ...略
    }
    # ...略
}
</syntaxhighlight>
<br>
<syntaxhighlight lang="nginx">
# NginXのサーバブロック設定ファイル (仮想ホスト 2)  例: PHP 7.4向け
server {
    # ...略
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9001
    location ~ \.php$ {
      root        /srv/www/htdocs/example2.com/;
      fastcgi_pass <IPアドレス または ホスト名 または PHP-FPMのソケットファイルのフルパス>;
                    # 例1: <127.0.0.1>:<ポート番号  例: 9001>
                    # 例2: unix:/<PHPのインストールディレクトリ 2>/var/run/php-fpm/php-fpm.sock;
                    # 例3: unix:/var/run/php-fpm/php-fpm74.sock;
      # ...略
    }
    # ...略
}
</syntaxhighlight>
<br>
NginXの設定ファイル群のシンタックスを確認する。<br>
sudo nginx -t
<br>
NginXおよび各PHP-FPM向けのSystemdサービスを起動する。<br>
以下の例は、RHELの場合である。<br>
sudo systemctl start nginx  \
                      php-fpm \      # 例: PHP-FPM 8.3の起動
                      php74-php-fpm  # 例: PHP-FPM 7.4の起動
<br>
ローカルでWebサーバを運用している場合は、/etc/hostsファイルを編集してローカルDNSを設定する。<br>
sudo vi /etc/hosts
<br>
# /etc/hostsファイル
127.0.0.1  <仮想ホスト名 1>  [<エイリアス名 1>]
127.0.0.1  <仮想ホスト名 2>  [<エイリアス名 2>]
<br>
下図のように、Webブラウザから仮想ホスト名またはエイリアス名を入力して、各Webサイトが正常に表示されるかどうかを確認する。<br>
[[ファイル:Install PHP 1.png|フレームなし|中央|800px]]<br>
<br><br>
<br><br>


366行目: 663行目:
Xdebugをインストールする場合は、[[インストール - Xdebug]]のページを参照すること。<br>
Xdebugをインストールする場合は、[[インストール - Xdebug]]のページを参照すること。<br>
<br><br>
<br><br>
== APCu ==
==== APCuとは ====
APCuは、PHP向けのインメモリ・キー / 値ストアである。<br>
キーは文字列型で、値は任意のPHP変数にすることができる。<br>
<br>
APUuはAPCからオペコードキャッシュを取り除いたものであり、<br>
変数のユーザランドキャッシュのみをサポートしている。<br>
<br>
APCuの詳細を知りたい場合は、[https://github.com/krakjoe/apcu-bc APCu Backwards Compatibility Module]を参照すること。<br>
<br>
==== APCuのインストール ====
# RHEL
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf install gcc make pcre-devel php-pear httpd-devel
sudo dnf install php-pecl-apcu
# SUSE
sudo zypper install php8-APCu
<br>
WebサーバまたはPHP-FPMを再起動する。<br>
# Apache 2の場合
sudo systemctl restart httpd
# PHP-FPMの場合
sudo systemctl restart php-fpm
<br>
==== ソースコードからのインストール ====
[https://github.com/krakjoe/apcu APCuのGithub]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf apcu-<バージョン>.tar.gz
cd apcu-<バージョン>
<br>
APCuをビルドおよびインストールする。<br>
phpize
mkdir apcu-build && cd apcu-build
../configure --prefix=<PHPのインストールディレクトリ> \
              --enable-apcu
make -j $(nproc)
make install
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:Web]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:Web]]