PHP

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page PHP and the translation is 83% complete.
Other languages:

PHPは、動的な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
bcmath Add support for libbcmath
berkdb Add support for sys-libs/db (Berkeley DB for MySQL)
bzip2 Use the bzlib compression library
calendar Add support for calendars (not using mcal!)
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 CLI SAPI
coverage Include gcov symbols for test coverage and lcov reports. Only useful for extension developers, and requires GCC.
ctype Enable ctype functions
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 Add supports Enchant spelling library.
exif Add support for reading EXIF headers from JPEG and TIFF images
ffi Add foreign function interface (ffi extension) support
fileinfo Add fileinfo extension support
filter Add filter extension support
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 Adds support for gd (bundled with PHP)
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
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
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 gettextGNU 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 Add support for process creation functions
pdo Enable the bundled PDO extensions
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 Add support for shared memory use
simplexml Support for SimpleXML
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 sqliteembedded 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 Support for System V-compatible inter-process communication
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
webp Enable webp support for GD in php-7.x
xml Add support for XML files
xmlreader Enable XMLReader support
xmlwriter Enable XMLWriter support
xpm Add support for XPM graphics format
xslt Enable the XSL extension
zip Enable support for ZIP archives
zlib Add support for zlib (de)compression

この ebuild は、"production" バージョンの php.ini に対し、より厳密なセキュリティ設定と、Gentoo システム用にデフォルトパスを調整する修正を施したものをインストールします。上流の "production" と "development" の php.ini ファイルは、/usr/share/doc/php-* にインストールされます。

拡張

拡張モジュールをインストールするには、まずどのバージョンの PHP に対して拡張モジュールをコンパイルするかを決定してください。これは、PHP_TARGETS 変数を設定することで行えます:

FILE /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
Important
make.conf でカスタムの NGINX_MODULES_HTTP 値が設定されている場合は、fastcgi モジュールが有効化されていることを確認してください。

Nginx がインストールされたら、/etc/nginx/nginx.conf の server セクションを以下のように変更してください:

FILE /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
Note
php-fpm サービス名の後ろのバージョン番号は、利用可能な PHP のバージョンによって変わるでしょう。適宜修正してください。

lighttpd

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

Make sure that lighttpd is built with support for fastcgi and that the php USE flag is disabled:

FILE /etc/portage/package.use
www-servers/lighttpd fastcgi -php

Lighttpd ships with a default FastCGI config file, but unfortunately, it is written to work with the old PHP FCGI SAPI only, instead of a general FCGI setup. Since the php USE flag has been disabled, it will not be included, and rightly so. However it does provide a good foundation for a configuration file that can be used with FPM.

Edit /etc/lighttpd/mod_fastcgi.conf to look something like this:

FILE /etc/lighttpd/mod_fastcgi.confEnable FastCGI on lighttpd
server.modules += ("mod_fastcgi")
fastcgi.server = ( ".php" =>
  ( "localhost" =>
    (
      "host" => "127.0.0.1",
      "port" => "9000"
    )
  )
)

Note the host and port parts.

Since Gentoo ships with a working php-fpm.ini file, located in /etc/php/fpm-php5/php-fpm.ini, and init script, starting the services is all that is needed:

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

FILE /etc/conf.d/apache2Apace に mod_php を読み込ませるように設定する
## (settings for PHP5 and above)
APACHE2_OPTS="-D PHP"

PHP が apahce2 USE フラグとともにビルドされていることを確認してください。

If for some reason the system is missing the PHP module integration file /etc/apache2/modules.d/70_mod_php.conf, currently provided by app-eselect/eselect-php when installed with apache2 USE flag set, manually insert it. Its current content is displayed below.

FILE /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.
	#
	# This is relative to ServerRoot (see httpd.conf).
	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>

Although multiple PHP versions can be installed on a system, Apache can only use a single PHP version with mod_php. Support for multiple PHP versions on Apache is available using fpm. The eselect php command is used to switch between active mod PHP versions.

参考