ラズパイで作る自宅WEBサーバ構築
第4回 PHP 設定 2025.06.13
PHPは The PHP Group によってコミュニティベースで開発されているオープンソースの汎用プログラミング言語です。サーバーサイドで動的なウェブページ作成するために使用します。
●php インストール
パッケージの有無を確認します
$ dpkg --get-selections | grep php
利用できるパッケージのバージョンを確認します
$ apt-cache show php
Package: php
Architecture: all
Version: 2:8.1+92ubuntu1
$ apt-cache show libapache2-mod-php
Package: libapache2-mod-php
Architecture: all
Version: 2:8.1+92ubuntu1
インストール可能なコンポーネントを検索します
$ apt-cache search php | grep php8.1 | more
libapache2-mod-php8.1 - サーバサイド HTML 組込みスクリプト言語 (Apache 2 モジュール)
php8.1 - サーバサイドの HTML 組込みスクリプト言語 (メタパッケージ)
php8.1-cgi - サーバサイドの HTML 組み込みスクリプト言語 (CGI バイナリ)
php8.1-cli - command-line interpreter for the PHP scripting language
php8.1-common - documentation, examples and common module for PHP
php8.1-curl - CURL module for PHP
php8.1-dev - Files for PHP8.1 module development
php8.1-gd - GD module for PHP
php8.1-gmp - GMP module for PHP
php8.1-ldap - LDAP module for PHP
php8.1-mbstring - MBSTRING module for PHP
php8.1-mysql - MySQL module for PHP
php8.1-odbc - ODBC module for PHP
php8.1-opcache - Zend OpCache module for PHP
php8.1-pgsql - PostgreSQL module for PHP
php8.1-pspell - pspell module for PHP
php8.1-readline - readline module for PHP
php8.1-snmp - SNMP module for PHP
php8.1-sqlite3 - SQLite3 module for PHP
php8.1-tidy - tidy module for PHP
php8.1-xml - DOM, SimpleXML, XML, and XSL module for PHP
libphp8.1-embed - HTML-embedded scripting language (Embedded SAPI library)
php8.1-bcmath - Bcmath module for PHP
php8.1-bz2 - bzip2 module for PHP
php8.1-dba - DBA module for PHP
php8.1-ds - PHP 7 用の効率的なデータ構造を提供する PHP 拡張
php8.1-enchant - Enchant module for PHP
php8.1-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php8.1-imap - IMAP module for PHP
php8.1-interbase - Interbase module for PHP
php8.1-intl - Internationalisation module for PHP
php8.1-memcache - memcache extension module for PHP
php8.1-memcached - memcached extension module for PHP, uses libmemcached
php8.1-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary)
php8.1-soap - SOAP module for PHP
php8.1-sybase - Sybase module for PHP
php8.1-zip - Zip module for PHP
php8.1-amqp - AMQP extension for PHP
php8.1-apcu - APC User Cache for PHP
php8.1-ast - AST extension for PHP 7
php8.1-gearman - PHP wrapper to libgearman
php8.1-gmagick - Provides a wrapper to the GraphicsMagick library
php8.1-gnupg - PHP wrapper around the gpgme library
php8.1-http - PECL HTTP module for PHP Extended HTTP Support
php8.1-igbinary - igbinary PHP serializer
php8.1-imagick - Provides a wrapper to the ImageMagick library
php8.1-mailparse - Email message manipulation for PHP
php8.1-mongodb - MongoDB driver for PHP
php8.1-msgpack - PHP extension for interfacing with MessagePack
php8.1-oauth - OAuth 1.0 consumer and provider extension
php8.1-pcov - Code coverage driver
php8.1-ps - ps module for PHP
php8.1-psr - PSR interfaces for PHP
php8.1-raphf - raphf module for PHP
php8.1-redis - PHP extension for interfacing with Redis
php8.1-rrd - PHP bindings to rrd tool system
php8.1-smbclient - PHP wrapper for libsmbclient
php8.1-solr - PHP extension for communicating with Apache Solr server
php8.1-ssh2 - Bindings for the libssh2 library
php8.1-uopz - UOPZ extension for PHP 7
php8.1-uploadprogress - file upload progress tracking extension for PHP
php8.1-uuid - PHP UUID extension
php8.1-xdebug - Xdebug Module for PHP
php8.1-xmlrpc - XML-RPC servers and clients functions for PHP
php8.1-xsl - XSL module for PHP (dummy)
php8.1-yac - YAC (Yet Another Cache) for PHP
php8.1-yaml - YAML-1.1 parser and emitter for PHP
php8.1-zmq - ZeroMQ messaging bindings for PHP
PHP をインストールします
$ sudo apt-get -y install libapache2-mod-php8.1 php8.1 php8.1-cgi php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-ldap php8.1-mysql php8.1-mbstring php8.1-imap php8.1-xml
もちろん後からコンポーネントの追加も可能なので、必要に応じてパッケージ(拡張モジュール)を追加してください。
インストール済みの拡張モジュールを確認します
$ php -m
[PHP Modules]
calendar
Core
ctype
curl
date
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
hash
iconv
imap
json
ldap
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zlib
[Zend Modules]
Zend OPcache
ここで、Apache Web サーバを再起動します。
$ sudo /etc/init.d/apache2 restart
●設定ファイル php.ini の編集
設定ファイル php.ini は動作環境によって参照されるファイルが異なります。
コマンドラインで参照される php.ini を確認します。
$ php --ini | grep php.ini
Configuration File (php.ini) Path: /etc/php/8.1/cli
Loaded Configuration File: /etc/php/8.1/cli/php.ini
Apache WEBサーバで参照される php.ini の確認
$ vi /home/example/www-root/phpinfo.php
<?php phpinfo(); ?>
ブラウザから
http://192.168.11.21/phpinfo.php

ここでは、Apaceh Web サーバーから参照される設定ファイルを編集します。
公開サーバ、開発・検証用サーバなど用途に応じて検討してください。
php.ini は公開サーバーの設定を使い、.htaccess などで設定を上書きして、開発・検証用サーバに適用してもよいと思います。
$ sudo vi /etc/php/8.1/apache2/php.ini
default_charset = UTF-8 ← デフォルト文字コード
mbstring.language = Japanese ← デフォルトの言語
date.timezone = Asia/Tokyo ← タイムゾーンの設定
expose_php = Off ← HTTPレスポンスによるPHPバージョン非表示
;mbstring.internal_encoding = ← PHP5.6以降で非推奨
;mbstring.http_input = ← PHP5.6以降で非推奨
;mbstring.http_output = ← PHP5.6以降で非推奨
log_errors = On ← エラーログをファイルに残す
error_log = /var/log/php_error.log ← エラーログの場所
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT ← エラー関連の留意点参照
display_errors = Off ← エラー非表示
display_startup_errors = Off ← PHP起動時エラー非表示
session.name = PHPSESSID
session.use_trans_sid = 0
session.use_cookies = 1
既に運用サーバ(192.168.11.20)があって、そこから設定ファイルを複写する場合は下記のようになります。
$ sudo scp -p ubuntu@192.168.11.21:/etc/php/7.4/apache2/php.ini /etc/php/8.1/apache2
Debian系OSでは、拡張モジュールの設定は、php.ini では行いません。(php.ini で extension の指定は必要ありません)
●PHPエラー関連の留意点
PHP7からE_STRICTが深刻度により、E_NOTICE、E_WARNING、E_DEPRECATED のいずれかに割り振られます。定数 E_STRICT は残っているのでエラーにはならないようです。
E_DEPRECATED:実行時の注意。これを有効にすると、 将来のバージョンで動作しなくなるコードについての警告を受け取ることができる。
E_WARNING:実行時の警告 (致命的なエラーではない)。スクリプトの実行は中断さ れません。
E_NOTICE:実行時の警告。エラーを発しうる状況に遭遇したことを示す。 ただし通常のスクリプト実行の場合にもこの警告を発することがありうる。
●セッション関連の留意点
session.use_trans_sid = 0
これを有効(1)にして、PHPのセッション管理機能を使うと、セッションIDを含むURLが生成されます。
利用者が、emailにより友人にセッションIDを含むURLを送信した場合、ユーザ名・パスワードなしにサイトにログインされてしまう可能性があります。
URLに基づくセッション管理は、Cookieに基づくセッション管理と比べ てセキュリティリスクが大きくなります。
session.use_cookies = 1
クライアント側にセッ ションIDを保存する際にクッキーを使用するかどうかを指定します。デフォルトは1 (有効)です。
session.name = PHPSESSID
Cookieの名前が PHPSESSID で、値がセッションIDになります。
セキュリティー上、セッション名は変更しておいたほうが無難です。
●拡張モジュールの設定
Debian(Ubuntu) で PHP 5.4 から拡張モジュールの設定ファイルの構成が変わっています。
拡張モジュールの設定ファイルを置くディレクトリ /etc/php/7.2/apache2/conf.d/ のすべてのファイルがリンクファイルへ変更され、
/etc/php/7.2/mods-available/ (php8.1の場合)という新しいディレクトリに、拡張モジュールの設定ファイルの実態を置くようになりました。
aptでインストールした際に、ここに拡張モジュール設定が追加されます。
$ ls -l /etc/php/8.1/apache2/conf.d | more
lrwxrwxrwx 1 root root 39 4月 4 20:11 10-mysqlnd.ini -> /etc/php/8.1/mods-available/mysqlnd.ini
lrwxrwxrwx 1 root root 39 4月 4 20:11 10-opcache.ini -> /etc/php/8.1/mods-available/opcache.ini
lrwxrwxrwx 1 root root 35 4月 4 20:09 10-pdo.ini -> /etc/php/8.1/mods-available/pdo.ini
lrwxrwxrwx 1 root root 35 4月 4 20:10 15-xml.ini -> /etc/php/8.1/mods-available/xml.ini
lrwxrwxrwx 1 root root 40 4月 4 20:09 20-calendar.ini -> /etc/php/8.1/mods-available/calendar.ini
lrwxrwxrwx 1 root root 37 4月 4 20:09 20-ctype.ini -> /etc/php/8.1/mods-available/ctype.ini
lrwxrwxrwx 1 root root 36 4月 4 20:10 20-curl.ini -> /etc/php/8.1/mods-available/curl.ini
lrwxrwxrwx 1 root root 35 4月 4 20:10 20-dom.ini -> /etc/php/8.1/mods-available/dom.ini
lrwxrwxrwx 1 root root 36 4月 4 20:09 20-exif.ini -> /etc/php/8.1/mods-available/exif.ini
lrwxrwxrwx 1 root root 35 4月 4 20:09 20-ffi.ini -> /etc/php/8.1/mods-available/ffi.ini
lrwxrwxrwx 1 root root 40 4月 4 20:09 20-fileinfo.ini -> /etc/php/8.1/mods-available/fileinfo.ini
lrwxrwxrwx 1 root root 35 4月 4 20:09 20-ftp.ini -> /etc/php/8.1/mods-available/ftp.ini
lrwxrwxrwx 1 root root 34 4月 4 20:12 20-gd.ini -> /etc/php/8.1/mods-available/gd.ini
lrwxrwxrwx 1 root root 39 4月 4 20:09 20-gettext.ini -> /etc/php/8.1/mods-available/gettext.ini
lrwxrwxrwx 1 root root 37 4月 4 20:09 20-iconv.ini -> /etc/php/8.1/mods-available/iconv.ini
lrwxrwxrwx 1 root root 36 4月 4 20:11 20-imap.ini -> /etc/php/8.1/mods-available/imap.ini
lrwxrwxrwx 1 root root 36 4月 4 20:11 20-ldap.ini -> /etc/php/8.1/mods-available/ldap.ini
lrwxrwxrwx 1 root root 40 4月 4 20:11 20-mbstring.ini -> /etc/php/8.1/mods-available/mbstring.ini
lrwxrwxrwx 1 root root 38 4月 4 20:11 20-mysqli.ini -> /etc/php/8.1/mods-available/mysqli.ini
lrwxrwxrwx 1 root root 41 4月 4 20:11 20-pdo_mysql.ini -> /etc/php/8.1/mods-available/pdo_mysql.ini
lrwxrwxrwx 1 root root 36 4月 4 20:09 20-phar.ini -> /etc/php/8.1/mods-available/phar.ini
lrwxrwxrwx 1 root root 37 4月 4 20:09 20-posix.ini -> /etc/php/8.1/mods-available/posix.ini
lrwxrwxrwx 1 root root 40 4月 4 20:11 20-readline.ini -> /etc/php/8.1/mods-available/readline.ini
lrwxrwxrwx 1 root root 37 4月 4 20:10 20-shmop.ini -> /etc/php/8.1/mods-available/shmop.ini
lrwxrwxrwx 1 root root 41 4月 4 20:10 20-simplexml.ini -> /etc/php/8.1/mods-available/simplexml.ini
lrwxrwxrwx 1 root root 39 4月 4 20:10 20-sockets.ini -> /etc/php/8.1/mods-available/sockets.ini
lrwxrwxrwx 1 root root 39 4月 4 20:10 20-sysvmsg.ini -> /etc/php/8.1/mods-available/sysvmsg.ini
lrwxrwxrwx 1 root root 39 4月 4 20:10 20-sysvsem.ini -> /etc/php/8.1/mods-available/sysvsem.ini
lrwxrwxrwx 1 root root 39 4月 4 20:10 20-sysvshm.ini -> /etc/php/8.1/mods-available/sysvshm.ini
lrwxrwxrwx 1 root root 41 4月 4 20:10 20-tokenizer.ini -> /etc/php/8.1/mods-available/tokenizer.ini
lrwxrwxrwx 1 root root 41 4月 4 20:10 20-xmlreader.ini -> /etc/php/8.1/mods-available/xmlreader.ini
lrwxrwxrwx 1 root root 41 4月 4 20:10 20-xmlwriter.ini -> /etc/php/8.1/mods-available/xmlwriter.ini
lrwxrwxrwx 1 root root 35 4月 4 20:11 20-xsl.ini -> /etc/php/8.1/mods-available/xsl.ini
Apache WEBサーバを再起動します
$ sudo /etc/init.d/apache2 restart
●get_magic_quotes_gpc()
get_magic_quotes_gpcはPHP8以降では削除となりました。
マジッククォートとは、POSTやGETで受け取ったリクエストデータに入っているシングルクオート(’)やダブルクオート(”)、バックスラッシュ(\)などの文字をPHP側で自動的にバックスラッシュでエスケープしてくれる機能です。
その機能がONかOFFかを判定する関数がget_magic_quotes_gpc()です。
PHP4~PHP5時代はこの機能がONとなっているサーバーが多く、SQLインジェクション対策で実装されていたようです
これで、PHP の設定は終了です。
次回は MySQL の設定を行います。
|