PHP

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page PHP and the translation is 100% complete.
Other languages:
Resources
#php (webchat)(registration required)

PHP は、動的な web ページを生成する汎用サーバサイドスクリプト言語です。1993 年に開発が開始され、1995 年に初めて公式にリリースされました。20 世紀の終わりに PHP は LAMP スタックでのより好ましい "P" として Perl を置き換え始めましたが、今度は Python による挑戦を受けることになりました。それでも PHP は、おそらく少なからず WordPress ブログプラットフォームの人気のおかげで、動的な web サイトと web アプリケーションのためのサーバサイドのスクリプト言語として人気であり続けています。

インストール

USE フラグ

PHP パッケージで最重要の USE フラグである、SAPI (サーバ API) USE フラグは、apache2cgi、そして fpm です。これらのフラグと並んで、PHP インタプリタの様々な機能を有効化するための、複雑なフラグのリストがあります:

USE flags for dev-lang/php The PHP language runtime engine

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)
cli Enable the Command-Line Interface (CLI) SAPI
ctype Enable the Character type checking (ctype) extension
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
fileinfo Enable the File Information extension
filter Enable the Data Filtering extension
firebird Add support for the Firebird relational database
flatfile Add dbm support for flat files
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)
iconv Enable support for the iconv character set conversion 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.
jit Enable PCRE JIT 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)
opcache Enables built-in opcode cache, replacing pecl-apc et al.
pcntl Enable the Process Control extension
pdo Enable the PHP Data Objects extension
phar Enables the phar extension to provide phar archive support
phpdbg Enable the PHP Debug Command Line SAPI (like gdb for php)
posix Add support for POSIX-compatible functions
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 Add persistent session support
session-mm Include dev-libs/mm support for session storage
sharedmem Enable the shmop extension
simplexml Enable the SimpleXML 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
tokenizer Add support for the PHP file parser
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
xml Add support for XML files
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 変数を設定することで行えます:

ファイル /etc/portage/make.conf
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 の部分を fpmcgiapache2 モジュールで置き換えてください。

バージョンを切り替えるには、以下を利用して下さい:

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 セクションを以下のように変更してください:

ファイル /etc/nginx/nginx.confFastCGI を介した PHP を有効化するための nginx 構成の一部
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

警告
www-servers/lighttpdphp USE フラグを有効化しないでください。実はこれでビルドが通らなくなることがあります。

lighttpd の php USE フラグが無効になっていることを確認してください:

ファイル /etc/portage/package.use
www-servers/lighttpd -php

Lighttpd にはデフォルトの FastCGI 構成ファイルが付属していますが、残念ながら、一般的な FCGI セットアップではなく、古い PHP FCGI SAPI でのみ動作するように記述されています。 php USE フラグが無効になっているため、含まれません。 ただし、FPM で使用できる構成ファイルの優れた基盤を提供します。

/etc/lighttpd/mod_fastcgi.conf を次のように編集してください:

ファイル /etc/lighttpd/mod_fastcgi.conflighttpd で FastCGI を有効化する
server.modules += ("mod_fastcgi")
fastcgi.server = ( ".php" =>
  ( "localhost" =>
    (
      "host" => "127.0.0.1",
      "port" => "9000"
    )
  )
)

hostport の部分に注意してください。

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 に変更されました。

ファイル /etc/conf.d/apache2Apace に mod_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 がシステムに無い場合は、手動で追加してください。ファイルの現在の内容を下に示します。

ファイル /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 モジュールが動作しているか確認するために、テストページを作成:

ファイル /var/www/localhost/htdocs/index.phpPHP テストページ
<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.

外部資料