📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の43版が非表示) | |||
| 1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
PHPは1995年にRasmus Lerdorfによって開発された主にWebアプリケーション開発のために設計されたプログラミング言語である。<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> | ||
PHPは継続的に進化を続けており、現在のPHP 8系では、JITコンパイラの導入や型システムの強化等、パフォーマンスと開発体験の向上が図られている。<br> | |||
これにより、より堅牢で高速なアプリケーション開発が可能になっている。<br> | |||
<br><br> | <br><br> | ||
| 22行目: | 51行目: | ||
<br> | <br> | ||
==== SUSE ==== | ==== SUSE ==== | ||
===== PHP 7をインストールする場合 (パッケージ管理システムのみ) ===== | |||
PHPおよび主要なPHPモジュールをインストールする。<br> | |||
sudo zypper install php7 php apache2-mod_php7 php7-curl php7-xmlreader php7-zip php7-pdo php7-gd php7-json php7-mysql php7-mbstring \ | |||
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 | * リポジトリを追加してインストール | ||
** | *: まず、Develリポジトリを追加する。 | ||
*: <syntaxhighlight lang="text"> | |||
**: < | # 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をインストールする。 | ||
*: <syntaxhighlight lang="text"> | |||
sudo zypper install php8 apache2-mod_php8 php8-curl php8-xmlreader php8-zip php8-pdo php8-gd php8-json php8-mysql php8-mbstring \ | |||
php8-openssl php8-devel php8-fpm php8-fileinfo php8-phar | |||
</syntaxhighlight> | |||
<br> | |||
SUSEのデフォルトのPHP-FPMは、<code>--with-fpm-user=wwwrun</code> オプション と <code>--with-fpm-group=www</code> オプションを付加してコンパイルされている。<br> | |||
<u>したがって、ユーザ名がwwwrun、グループ名がwwwであることに注意する。</u><br> | |||
<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 | sudo apt install lsb-release | ||
<br> | <br> | ||
packages.sury. | 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> | ||
# PHP 8.4 | |||
sudo apt- | 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.2 | |||
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 | |||
sudo apt | |||
# PHP 7.4 | # PHP 7.4 | ||
sudo apt | 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のインストール (ソースコードからインストールする場合) == | ||
==== 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 | sudo zypper install make gcc gcc-c++ ccache re2c gmp-devel pcre-devel pcre2-devel zlib-devel libzip-devel \ | ||
readline-devel libcurl-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 \ | ||
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 | sqlite3-devel \ | ||
postgresql-devel | unixODBC-devel \ | ||
valgrind-devel | libmariadb-devel \ | ||
aspell-devel | 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-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-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- | --with-fpm-systemd \ | ||
--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- | --with-pdo-firebird \ # Firebirdを使用する場合 | ||
--with-pear \ | --with-pear \ | ||
--with-valgrind \ # Valgrind (メモリリーク検知機能) を有効にする場合 | --with-valgrind \ # Valgrind (メモリリーク検知機能) を有効にする場合 | ||
--with-mcrypt | --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 | # SUSE | ||
sudo zypper install libonig4 | |||
libpq5 # PostgresSQLを使用する場合 | |||
libaspell15 # GNU ASpellを使用する場合 | |||
libc-client2007e_suse # SUSE 15.5以前 | |||
<br> | <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の設定 ==== | |||
php. | 次に、PHPの設定ファイルである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- | ==== 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- | ==== PHP-FPMのプール設定 ==== | ||
PHP- | Webアプリケーションを使用する場合、PHP-FPMのプール設定ファイルであるwww.confファイルを作成する。<br> | ||
PHP-FPMを実行するには、使用するユーザアカウントを設定する必要がある。<br> | |||
<br> | |||
適切なアカウントを使用しない場合は、パーミッションエラーが発生する可能性がある。<br> | |||
<br> | |||
また、使用するアカウントは、OSやWebサーバによって異なる。<br> | |||
<br> | <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> | |||
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. | ;例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> | ||
必要ならば、PHP-FPMのアクセスファイルやログファイルを配置するディレクトリパスを変更または作成する。<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 | |||
==== 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=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- | PHP-FPMを使用する場合に限り、複数のバージョンのPHPをインストールしてApache2 / Nginxで動作することができる。<br> | ||
<br> | <br> | ||
あらかじめ、1つのPHPのバージョンを標準として設定しておき、仮想ホストにおいて他のPHPのバージョンを実行することができる。<br> | |||
これは、PHPベースのソフトウェアが特定のバージョンを必要とする場合や最新版のPHPとの互換性が無い場合に必要となる。<br> | これは、PHPベースのソフトウェアが特定のバージョンを必要とする場合や最新版のPHPとの互換性が無い場合に必要となる。<br> | ||
<br> | <br> | ||
==== Apache2の場合 ==== | |||
以下の例では、複数のバージョンのPHPを同時に実行している。<br> | 以下の例では、複数のバージョンのPHPを同時に実行している。<br> | ||
<br> | <br> | ||
まず、複数のバージョンのPHP-FPMをインストールする。 | まず、複数のバージョンの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]] | ||