PHP
PHP は、動的な web ページを生成する汎用サーバサイドスクリプト言語です。1993 年に開発が開始され、1995 年に初めて公式にリリースされました。20 世紀の終わりに PHP は LAMP スタックでのより好ましい "P" として Perl を置き換え始めましたが、今度は Python による挑戦を受けることになりました。それでも PHP は、おそらく少なからず WordPress ブログプラットフォームの人気のおかげで、動的な web サイトと web アプリケーションのためのサーバサイドのスクリプト言語として人気であり続けています。
インストール
USE フラグ
PHP パッケージで最重要の USE フラグである、SAPI (サーバ API) USE フラグは、apache2、cgi、そして fpm です。これらのフラグと並んで、PHP インタプリタの様々な機能を有効化するための、複雑なフラグのリストがあります:
USE flags for dev-lang/php The PHP language runtime engine
+cli
|
Enable the Command-Line Interface (CLI) SAPI |
+ctype
|
Enable the Character type checking (ctype) extension |
+fileinfo
|
Enable the File Information extension |
+filter
|
Enable the Data Filtering extension |
+flatfile
|
Add dbm support for flat files |
+iconv
|
Enable support for the iconv character set conversion library |
+jit
|
Enable PCRE JIT support |
+opcache
|
Enables built-in opcode cache, replacing pecl-apc et al. |
+opcache-jit
|
Enable Just In Time (JIT) compilation within the opcache extension |
+phar
|
Enables the phar extension to provide phar archive support |
+posix
|
Add support for POSIX-compatible functions |
+session
|
Add persistent session support |
+simplexml
|
Enable the SimpleXML extension |
+tokenizer
|
Add support for the PHP file parser |
+xml
|
Add support for XML files |
acl
|
Add support for Access Control Lists |
apache2
|
Add Apache2 support |
apparmor
|
Support FPM application confinement through sys-libs/libapparmor |
argon2
|
Enable password hashing algorithm from app-crypt/argon2 |
avif
|
Add AV1 Image Format (AVIF) support |
bcmath
|
Enable the BCMath Arbitrary Precision Mathematics extension |
berkdb
|
Add support for sys-libs/db (Berkeley DB for MySQL) |
bzip2
|
Enable bzip2 compression support |
calendar
|
Add support for calendars (not using mcal!) |
capstone
|
Support opcache JIT disassembly through dev-libs/capstone |
cdb
|
Add support for the CDB database engine from the author of qmail |
cgi
|
Add CGI script support |
cjk
|
Add support for Multi-byte character languages (Chinese, Japanese, Korean) |
coverage
|
Include gcov symbols for test coverage and lcov reports. Only useful for extension developers, and requires GCC. |
curl
|
Add support for client-side URL transfer library |
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
embed
|
Enable embed SAPI |
enchant
|
Enable the Enchant spelling library extension using app-text/enchant |
exif
|
Add support for reading EXIF headers from JPEG and TIFF images |
ffi
|
Enable the Foreign Function Interface (FFI) extension using dev-libs/libffi |
firebird
|
Add support for the Firebird relational database |
fpm
|
Enable the FastCGI Process Manager SAPI |
ftp
|
Add FTP (File Transfer Protocol) support |
gd
|
Enable the Image Processing and GD extension (requires media-libs/libjpeg-turbo and media-libs/libpng) |
gdbm
|
Add support for sys-libs/gdbm (GNU database libraries) |
gmp
|
Add support for dev-libs/gmp (GNU MP library) |
imap
|
Add support for IMAP (Internet Mail Application Protocol) |
inifile
|
Add dbm support for .ini files |
intl
|
Enables the intl extension for extended internalization support |
iodbc
|
Add support for iODBC library |
ipv6
|
Support IPv6 connectivity in fopen and friends, and v6 address conversions in functions like inet_pton and inet_ntop. |
jpeg
|
Add JPEG image support |
kerberos
|
Add kerberos support |
ldap
|
Add LDAP support (Lightweight Directory Access Protocol) |
ldap-sasl
|
Add SASL support for the PHP LDAP extension using dev-libs/cyrus-sasl |
libedit
|
Use the libedit library (replacement for readline) |
lmdb
|
Enable support for dev-db/lmdb db backend |
mhash
|
Add support for the mhash library |
mssql
|
Add support for Microsoft SQL Server database |
mysql
|
Add mySQL Database support |
mysqli
|
Add support for the improved mySQL libraries |
nls
|
Add Native Language Support (using gettext - GNU locale utilities) |
oci8-instant-client
|
Use dev-db/oracle-instantclient-basic as Oracle provider instead of requiring a full Oracle server install |
odbc
|
Add ODBC Support (Open DataBase Connectivity) |
pcntl
|
Enable the Process Control extension |
pdo
|
Enable the PHP Data Objects extension |
phpdbg
|
Enable the PHP Debug Command Line SAPI (like gdb for php) |
png
|
Add support for libpng (PNG images) |
postgres
|
Add support for the postgresql database |
qdbm
|
Add support for the qdbm (Quick Database Manager) library |
readline
|
Enable support for libreadline, a GNU line-editing library that almost everyone wants |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
session-mm
|
Include dev-libs/mm support for session storage |
sharedmem
|
Enable the shmop extension |
snmp
|
Add support for the Simple Network Management Protocol if available |
soap
|
Add support for SOAP (Simple Object Access Protocol) |
sockets
|
Add support for tcp/ip sockets |
sodium
|
Enable support for crypto through dev-libs/libsodium |
spell
|
Add dictionary support |
sqlite
|
Add support for sqlite - embedded sql database |
ssl
|
Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security) |
systemd
|
Enable use of systemd-specific libraries and features like socket activation or session tracking |
sysvipc
|
Enable the PHP System-V semaphore, shared memory and IPC extension |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
threads
|
Add threads support for various packages. Usually pthreads |
tidy
|
Add support for HTML Tidy |
tokyocabinet
|
Enable support for dev-db/tokyocabinet db backend |
truetype
|
Add support for FreeType and/or FreeType2 fonts |
unicode
|
Add support for Unicode |
valgrind
|
Enable annotations for accuracy. May slow down runtime slightly. Safe to use even if not currently using dev-debug/valgrind |
webp
|
Add support for the WebP image format |
xmlreader
|
Enable the XMLReader extension |
xmlwriter
|
Enable the XMLWriter extension |
xpm
|
Add support for XPM graphics format |
xslt
|
Build the XSL extension |
zip
|
Enable support for ZIP archives |
zlib
|
Add support for zlib compression |
この ebuild は、"production" バージョンの php.ini に対し、より厳密なセキュリティ設定と、Gentoo システム用にデフォルトパスを調整する修正を施したものをインストールします。上流の "production" と "development" の php.ini ファイルは、/usr/share/doc/php-* にインストールされます。
拡張
拡張モジュールをインストールするには、まずどのバージョンの PHP に対して拡張モジュールをコンパイルするかを決定してください。これは、PHP_TARGETS 変数を設定することで行えます:
PHP_TARGETS="php5-6"
複数のバージョンを定義することができます; スペースで区切って、追加のバージョンを追加してください。php スロットの名前が "5.6" のとき、対応する PHP_TARGETS の値は php5-6
であることに注意してください。これは現行の USE 名の制限によるものです。
Emerge
上記のUSEフラグ設定を行った後、変更を有効にするためにシステムを更新する必要があります:
root #
emerge --ask --update --changed-use --deep @world
複数のバージョンの PHP を実行する
PHP 開発のために Gentoo を使用する大きな利点のひとつは、バージョンスロットです。複数のバージョンの PHP の間で切り換えたり、複数のバージョンを同時に実行するのは、とても簡単に行えます。これはすべて app-eselect/eselect-php パッケージが提供する eselect コマンドによって行われ、これは PHP をインストールすると自動的に emerge されるはずです。
例えば、異なるバージョンの PHP を選択することで、cli SAPI では PHP 7.0 を実行しながら、システムの web サーバとしては PHP 5.6 を実行する、ということが可能になります。また、システム管理者またはアプリケーション開発者は、アプリケーションをすぐに異なるバージョンの PHP でテストすることが可能になります。
cli SAPI モジュールのために利用可能なバージョンの一覧を表示するには、次の構文を使用してください:
root #
eselect php list cli
[1] php5.5 [2] php5.6 * [3] php7.0
*
(アスタリスク) は、選択されたモジュールのために現在アクティブなバージョンを示しています。他の SAPI を確認するには、単に cli
の部分を fpm
や cgi
や apache2
モジュールで置き換えてください。
バージョンを切り替えるには、以下を利用して下さい:
root #
eselect php set cli 3
この例での数値 3
は、上で使用した list
サブコマンドの出力にある数値に対応しています。これで、コマンドラインのためには PHP バージョン 7.0 が使用されるようになりました:
root #
php -v
PHP 7.0.10-pl0-gentoo (cli) (built: Aug 23 2016 12:38:44) ( NTS )
設定
PHP の構成は /etc/php に置かれます。サーバ API (SAPI) ごとにそれぞれ、そして PHP のバージョンごとにそれぞれ 1 つのサブディレクトリを含みます。例えば、PHP-5.6 apache2 SAPI のための構成ファイルは /etc/php/apache2-php5.6 にインストールされます。
ウェブサーバ
PHPをサーバ側で使用するには、WebサーバをインストールしてPHPを使用するように設定する必要があります。 数多くの一般的なWebサーバーが次に簡単に触れられます。
Nginx
nginx をインストールするには、単に emerge してください:
root #
emerge --ask www-servers/nginx
make.conf でカスタムの NGINX_MODULES_HTTP 値が設定されている場合は、
fastcgi
モジュールが有効化されていることを確認してください。Nginx がインストールされたら、/etc/nginx/nginx.conf の server セクションを以下のように変更してください:
server {
listen 127.0.0.1;
server_name localhost;
access_log /var/log/nginx/localhost.access_log main;
error_log /var/log/nginx/localhost.error_log info;
root /var/www/localhost/htdocs;
location ~ \.php$ {
try_files $uri $uri/ =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf;
}
}
それでは、ウェブサイトを機能させるために関連するサービスを開始してください。php-fpm init スクリプトは PHP FastCGI Process Manager を開始します。FastCGI を使用すると、ウェブサーバは PHP の計算をこのプロセスマネージャに任せて、負荷を軽減することができます。
サービスマネージャとして OpenRC を実行している場合は:
root #
rc-service nginx start
root #
rc-service php-fpm start
systemd では:
root #
systemctl start nginx
root #
systemctl start php-fpm@7.2
php-fpm
サービス名の後ろのバージョン番号は、利用可能な PHP のバージョンによって変わるでしょう。適宜修正してください。lighttpd
lighttpd の php
USE フラグが無効になっていることを確認してください:
www-servers/lighttpd -php
Lighttpd にはデフォルトの FastCGI 構成ファイルが付属していますが、残念ながら、一般的な FCGI セットアップではなく、古い PHP FCGI SAPI でのみ動作するように記述されています。 php
USE フラグが無効になっているため、含まれません。 ただし、FPM で使用できる構成ファイルの優れた基盤を提供します。
/etc/lighttpd/mod_fastcgi.conf を次のように編集してください:
server.modules += ("mod_fastcgi")
fastcgi.server = ( ".php" =>
( "localhost" =>
(
"host" => "127.0.0.1",
"port" => "9000"
)
)
)
host
と port
の部分に注意してください。
Gentoo の PHP パッケージは動作する php-fpm.ini ファイルを /etc/php/fpm-php5/php-fpm.ini に配置し、init スクリプトも同梱しているため、サービスの開始に必要なのはこれだけです:
root #
/etc/init.d/php-fpm start
root #
/etc/init.d/lighttpd start
Apache (mod_php)
Apache に PHP5 モジュール (mod_php) を読み込ませるように設定するには、/etc/conf.d/apache2 内で APACHE2_OPTS 変数に -D PHP
を追加してください。以前は、(-D PHP5
のように) PHP のバージョンも追加する必要があったのを覚えている人もいるでしょう。しかしながら、app-eselect/eselect-php バージョン 0.8.1 から、将来のメジャーバージョンを簡単に統合できるようにするために、変数はただの -D PHP
に変更されました。
## (settings for PHP5 and above)
APACHE2_OPTS="-D PHP"
PHP が apahce2
USE フラグとともにビルドされていることを確認してください。
もし何らかの理由で、現在 apache2
USE フラグが設定された状態でインストールされた app-eselect/eselect-php によって提供される、PHP モジュール統合ファイル /etc/apache2/modules.d/70_mod_php.conf がシステムに無い場合は、手動で追加してください。ファイルの現在の内容を下に示します。
<IfDefine PHP>
# The mod_php.so symlink is controlled by
# eselect-php. However, the module name changed from
# php5_module to php7_module so we can't blindly load whatever
# is there. Instead we let eselect-php manage a small
# configuration file that loads the appropriate module.
Include "/var/lib/eselect-php/mod_php.conf"
# Tell apache that mod_php should handle PHP files.
#
# NOTE: Avoiding AddHandler/AddType for security (bug
# #538822). Please read the related news item!
<FilesMatch "\.(php|php[57]|phtml)$">
SetHandler application/x-httpd-php
</FilesMatch>
# PHP source files which are meant to be displayed as
# syntax-highlighted source code.
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
DirectoryIndex index.php index.phtml
</IfDefine>
システムに複数の PHP バージョンをインストールすることができても、Apache は mod_php とともに単一の PHP バージョンしか使用することができません。Apache 上で複数の PHP バージョンに対応するには、fpm を使用することで可能になります。アクティブな mod PHP バージョンを切り換えるためには eselect php コマンドが使用されます。
Apache によって処理される PHP のバージョンを変えるには、まず apache2
Server Application Programming Interface (SAPI) で利用可能なバージョンをリストアップします:
root #
eselect php list apache2
[1] php5.3 [2] php5.4 * [3] php5.5
選択したバージョンに変更するには:
root #
eselect php set apache2 N
上の例の N
は、先ほど表示したような eselect php list apache2 の出力の中から選択した番号で置き換えてください。
PHP モジュールが動作しているか確認するために、テストページを作成:
<html>
<body>
<?php phpinfo(); ?>
</body>
</html>
そして、/var/www/localhost/htdocs/index.html を削除するかリネームして、テストページを開きましょう: http://localhost/
PHP の設定が記述された表が見られるでしょう。
Apache (fcgid)
Apache の記事の fcgid を利用して PHP を有効化するを参照してください。
Apache (mod_proxy_fcgi)
Apache 2.4 で mod_proxy_fcgi を利用して PHP-FPM を有効化するを参照してください。
関連項目
- Upgrading to PHP 5.6、古いインストールから 5.6 へのアップグレードガイド
- Upgrading to PHP 7.1、古いインストールから 7.1 へのアップグレードガイド
- Apache 記事内での PHP サポートを有効にする
- Perl — a general purpose interpreted programming language with a powerful regular expression engine.
- Python — an extremely popular cross-platform object oriented programming language.