2022.11.11 Web制作
システム開発 - PHPのモジュールの確認とインストール
前回のPHP php.iniの確認と設定では、php.iniで設定が必要な箇所について確認してみました。
AWS WebサーバーへPHPとApacheのインストールでは、PHPモジュールも最低限しかインストールされていません。
今回は、必要そうなモジュールの確認なども行っていきたいと思います。
環境
[ec2-user@ip-10-0-10-127 /]$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
[ec2-user@ip-10-0-10-127 /]$ httpd -v
Server version: Apache/2.4.54 ()
Server built: Jun 30 2022 11:02:23
[ec2-user@ip-10-0-10-127 /]$ php -v
PHP 8.0.20 (cli) (built: Jun 23 2022 20:34:07) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.20, Copyright (c) Zend Technologies
モジュールの確認
現在インストールされているPHP関連のモジュールを確認してみます。
AWS WebサーバーへPHPとApacheのインストールでは、PHPだけのインストールでしたが、依存関係によりいくつかのモジュールがインストールされています。
[ec2-user@ip-10-0-10-127 /]$ sudo yum list installed | grep php8.0
php-cli.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php-common.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php-fpm.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php-mysqlnd.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php-pdo.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
[ec2-user@ip-10-0-10-127 /]$
さて、これによりどんなモジュールが入ったのでしょうか?
現時点でインストールされているモジュールの一覧を確認してみます。
[ec2-user@ip-10-0-10-127 /]$ php -m
[PHP Modules]
・・・
[Zend Modules]
[ec2-user@ip-10-0-10-127 /]$
縦に長くなるので、PHP Modulesの部分を下記に書き出します。
bz2 / calendar / Core / ctype / curl / date / exif / fileinfo / filter / ftp / gettext / hash / iconv / json / libxml / mysqli / mysqlnd / openssl / pcntl / pcre / PDO / pdo_mysql / pdo_sqlite / Phar / readline / Reflection / session / sockets / SPL / sqlite3 / standard / tokenizer / zip / zlib
多くのモジュールが既に登録されています。この多くのモジュールは、php-commonによりインストールされたものです。
どのようなデータがインストールされたかは下記で確認できます。内容が長くなるので、表示は割愛します。
[ec2-user@ip-10-0-10-127 /]$ rpm -ql php-common
・・・
/etc/php.d/20-bz2.ini
/etc/php.d/20-calendar.ini
/etc/php.d/20-ctype.ini
/etc/php.d/20-curl.ini
/etc/php.d/20-exif.ini
/etc/php.d/20-fileinfo.ini
/etc/php.d/20-ftp.ini
/etc/php.d/20-gettext.ini
/etc/php.d/20-iconv.ini
/etc/php.d/20-phar.ini
/etc/php.d/20-sockets.ini
/etc/php.d/20-tokenizer.ini
/etc/php.d/20-zip.ini
・・・
[ec2-user@ip-10-0-10-127 ~]$
それでは、個別のモジュールについてどんなものが入っているか確認してみます。
bz2 - Bzip2
bzip2関数は、bzip2 (.bz2) 圧縮されたファイルを透過的に読み書きするために使用します。
https://www.php.net/manual/ja/intro.bzip2.php
calendar - カレンダー
カレンダー拡張モジュールは異なったカレンダーフォーマット間の変換処理をシンプルにする関数の集まりです。標準としているのは、ユリウス積算日です。 ユリウス積算日は、紀元前 4713 年 1 月 1 日から数え始められています。 複数のカレンダーシステム間の変換を行うには、ユリウス積算日に変換した後 に選択したカレンダーシステムに変換しなければなりません。 ユリウス積算日はユリウス暦とはまったく異なります
https://www.php.net/manual/ja/intro.calendar.php
ctype - 文字タイプチェック
現在のロケール(setlocale()も参照) に基づき文字または文字列がある文字クラスに含まれるかどうかを調べます。
https://www.php.net/manual/ja/intro.ctype.php
Core
PHPの中心プログラムで、C言語で書かれています。PHPは、スクリプトを解析して、言語エンジンであるZend Engineを通して実行されます。変数や関数のメモリ管理などを行うの部分です。
拡張モジュールの一覧/分類 では、下記がPHP Coreに含まれていると記載されています。
- 配列 ・・・ 配列にアクセスし操作する
- クラス/オブジェクトの情報 ・・・ クラスやインスタンスオブジェクトに関する情報を得る
- 関数処理 ・・・ 関数で行う様々な処理
- Reflection / リフレクション ・・・ クラスなどの型やプロパティを実行時に調べる
- 変数操作
- PHP オプションと情報 ・・・ PHP自体に関する多くの情報を取得
- 日付・時刻 ・・・ 日付/時刻 に関する情報を表現
- ディレクトリ
- エラー処理およびログ記録
- システムプログラムの実行 ・・・ システム上でのコマンドの実行やコマンドを安全に実行する手段を提供
- ファイルシステム
- JSON / JavaScript Object Notation ・・・ Jsonデータとの交換形式を実装
- メール ・・・ メールの送信が可能になる
- Math - 数学関数
- その他 - その他の関数 ・・・ 他のカテゴリには当てはまらない関数群
- ネットワーク ・・・ さまざまなネットワーク関数を提供
- 出力バッファリング制御 ・・・ スクリプトから送信される出力を制御
- パスワードのハッシュ ・・・ いくつかのパスワードハッシュアルゴリズムを 手軽に使えるようにしたラッパー
- PCRE / 正規表現 (Perl 互換) ・・・ Perl と類似したパターンの構文を提供
- random - 乱数生成器および、乱数関連の関数
- SPL - Standard PHP Library
- ストリーム ・・・ ストリーミング可能な動作を体現
- 文字列 ・・・ 文字列をいろいろな方法で操作
- URLs ・・・ URL文字列を処理
curl - Client URL Library(cURL)
PHP は、Daniel Stenbergにより開発されたライブラリlibcurl をサポートします。 このライブラリにより、多くの異なったプロトコルで様々なサーバーと接続し、 通信することが可能になります。libcurl は現在 http, https, ftp, gopher, telnet, dict, file, ldap プロトコルをサポートしてします。
https://www.php.net/manual/ja/intro.curl.php
date
PHP Coreモジュール
exif - Exchangeable image information(Exif)
exif 拡張モジュールを使用すると、画像のメタデータを扱うことが可能と なります。例えば、デジタルカメラで撮影した画像ファイルから 画像のヘッダ情報を読み込むために exif 関数を使用することができます。 こうした情報は、通常 JPEG や TIFF 画像で見つかります。
https://www.php.net/manual/ja/intro.exif.php
fileinfo - ファイル情報
このモジュールの関数は、ファイル内の特定の位置から magic バイトシーケンスを見つけることで、 ファイルの content type とエンコーディングを推測します。 これは完全な手法ではありませんが、経験上かなりうまく動作しています。
https://www.php.net/manual/ja/intro.fileinfo.php
filter - データのフィルタリング
この拡張モジュールは、データの検証や除去を行います。 未知の (外部からの) データ、たとえばユーザーの入力などを扱う際に便利です。
https://www.php.net/manual/ja/book.filter.php
ftp - FTP
この拡張モジュールの関数は、» http://www.faqs.org/rfcs/rfc959 で定義された File Transfer Protocol (FTP) を使用してファイルサーバーに アクセスするクライアントの実装です。この拡張を利用することで、FTP サーバーにアクセスしてさまざまな操作をするスクリプトを作成することができます。
https://www.php.net/manual/ja/intro.ftp.php
gettext - Gettext
gettext 関数は、NLS (Native Language Support) API を実装するもので、 PHP アプリケーションを国際化する際に使用することが可能です。
https://www.php.net/manual/ja/intro.gettext.php
hash - HASH メッセージダイジェストフレームワーク
メッセージダイジェスト (ハッシュ) エンジンです。さまざまなハッシュ アルゴリズムを使用して、任意の長さのメッセージに対する 直接的あるいは段階的な処理を可能とします。
https://www.php.net/manual/ja/intro.hash.php
iconv - iconv
このモジュールには、iconv による文字集合の変換機能へのインターフェイスが含まれています。 このモジュールにより、ローカルな文字集合で表された文字列を、Unicode 文字集合のような 他の文字集合で表わされた文字列に変換することができます。
https://www.php.net/manual/ja/intro.iconv.php
json - JavaScript Object Notation(JSON)
この拡張モジュールは、» JavaScript Object Notation (JSON) というデータ交換形式を実装したものです。
https://www.php.net/manual/ja/intro.json.php
libxml - libxml
以下にあげるコア拡張モジュールは、この libxml 拡張モジュールに依存しています。 DOM, libxml, SimpleXML, SOAP, WDDX, XSL, XML, XMLReader, XMLRPC, XMLWriter
https://www.php.net/manual/ja/intro.libxml.php
mysqli - MySQL 改良版拡張モジュール
mysqli 拡張サポートによって MySQL 4.1 以上で提供される機能を利用することができるようになります。
https://www.php.net/manual/ja/intro.mysqli.php
mysqlnd - MySQL Native Driver
MySQL Native Driver(mysqlnd) は、MySQL Client Library (libmysqlclient) の後継です。
https://www.php.net/manual/ja/intro.mysqlnd.php
openssl - OpenSSL
この拡張モジュールは、対称鍵による暗号化、非対称鍵による暗号化や、 PBKDF2, PKCS7, PKCS12, X509 その他の暗号の操作を行う » OpenSSL ライブラリの機能をバインドしています。 それに加えて、TLS ストリームの実装も提供しています。
https://www.php.net/manual/ja/intro.openssl.php
pcntl - プロセス制御(PCNTL)
PHP がサポートするプロセス制御関数は、Unix 形式のプロセス生成、 プロセス実行、シグナル処理、プロセス終了機能を実装しています。
https://www.php.net/manual/ja/intro.pcntl.php
pcre - 正規表現(Perl 互換)
PHP Coreモジュール
PDO - PHP Data Objects
PHP Data Objects (PDO) 拡張モジュールは、 PHP の中からデータベースにアクセスするための軽量で高性能な インターフェイスを定義します。
https://www.php.net/manual/ja/intro.pdo.php
pdo_mysql - MySQL 関数 (PDO_MYSQL)
PDO_MYSQL は、PHP から MySQL データベースへのアクセスを可能にするための PHP Data Objects (PDO) インターフェイス を実装したドライバです。
https://www.php.net/manual/ja/ref.pdo-mysql.php
pdo_sqlite - SQLite 関数 (PDO_SQLITE)
PDO_SQLITE は、PHP から SQLite 2 や SQLite 3 データベースへのアクセスを可能にするための PHP Data Objects (PDO) インターフェイス を実装したドライバです。
https://www.php.net/manual/ja/ref.pdo-sqlite.php
Phar - Phar
phar 拡張モジュールは、PHP アプリケーション全体をひとつの "phar" (PHP Archive) ファイルにまとめてしまい、配布やインストールを容易にするためのものです。 それだけでなく、phar 拡張モジュールではファイルフォーマットを抽象化する機能も提供しており、 tar 形式や zip 形式のファイルを PharData クラスで扱うことができます。
https://www.php.net/manual/ja/intro.phar.php
readline - GNU Readline
readline 関数群は、GNU Readline ライブラリへの インターフェイスを実装したものです。これらの関数は、コマンドラインの 編集機能を提供します。一例をあげると、Bash において文字を挿入したり コマンド履歴を走査したりする際に、矢印キーを使用することを 可能にしているものです。
https://www.php.net/manual/ja/intro.readline.php
Reflection - リフレクション
PHP Coreモジュール
session - セッション処理(Sessions)
PHPのセッションサポート機能は、複数回のアクセスを通じて特定のデータを保持する手段を実現するものです。
https://www.php.net/manual/ja/intro.session.php
sockets - ソケット
ソケット拡張モジュールは、一般的な BSD ソケットに基づくソケット通信に関する低レベルインターフェイスを実装し、 クライアントだけでなく、 ソケットサーバーとして動作させることが可能となります。
https://www.php.net/manual/ja/intro.sockets.php
SPL - Standard PHP Library (SPL)
PHP Coreモジュール
sqlite3 - SQLite3
SQLite バージョン 3 のデータベースをサポートします。
https://www.php.net/manual/ja/intro.sqlite3.php
standard
PHP Coreモジュール
tokenizer - Tokenizer
tokenizer 関数は、Zend Engine に組み込まれた PHP tokenizer へのインターフェイスを提供します。以下の関数により、 字句解析レベルの言語処理を行うことなく、 PHP ソースを解析/修正するツールを作成することが可能となります。
https://www.php.net/manual/ja/intro.tokenizer.php
zip - Zip
この拡張モジュールにより、ZIP 圧縮されたアーカイブとその内部のファイルに対する透過的な読み書きが可能となります。
https://www.php.net/manual/ja/intro.zip.php
zlib - Zlib 圧縮
このモジュールにより gzip (.gz) で圧縮されたファイルを読み書きすることが可能となります。 この際、ファイルシステム 関数の gzip 圧縮対応版 (非圧縮ファイルも扱えますが、 ソケットは扱えません)を使用します。
https://www.php.net/manual/ja/intro.zlib.php
初期インストールだけでも多くのモジュールが組み込まれていることが分かります。
モジュールのインストール
概要が見えたところで、日本語を扱ううえで重要なモジュールであるmbstringが入っていませんので、インストールしたいと思います。
現時点でincludeされているモジュール一覧の確認
取り込まれているモジュールの一覧は下記で確認できます。
[ec2-user@ip-10-0-10-127 /]$ ll /etc/php.d
・・・
[ec2-user@ip-10-0-10-127 php.d]$
「ll」コマンドは「ls -l」と同じです。こちらの方が便利ですので、今後使っていこうと思います。
上記では事前に取得しておくことを忘れてしまったので、内容は表示していませんが、mbstringが無いことが分かると思います。
mbstring - マルチバイト文字列
mbstringは、PHP上でマルチバイト文字を扱えるようにする拡張モジュールです。
マルチバイト文字とは、ざっくりいうと全角/半角文字の全角文字という認識で良いかと思います。
mbstringのインストール
早速インストールしていきます。
まずは、モジュールがあるか確認です。php8.0のものを探します。
[ec2-user@ip-10-0-10-127 php.d]$ yum list | grep php8.0
・・・
php-mbstring.x86_64 8.0.25-1.amzn2 amzn2extra-php8.0
・・・
[ec2-user@ip-10-0-10-127 php.d]$
「php-mbstring.x86_64」がありましたので、こちらをインストールします。
途中のyesをスルーしたい場合には「-y」オプションを使用してください。
[ec2-user@ip-10-0-10-127 php.d]$ sudo yum install php-mbstring
・・・
完了しました!
[ec2-user@ip-10-0-10-127 php.d]$ php -m
・・・
mbstring
・・・
[ec2-user@ip-10-0-10-127 php.d]$
無事追加されたようです。そして改めてインクルードの状態を確認します。
[ec2-user@ip-10-0-10-127 /]$ ll /etc/php.d
合計 80
-rw-r--r-- 1 root root 44 11月 1 07:48 20-bz2.ini
-rw-r--r-- 1 root root 54 11月 1 07:48 20-calendar.ini
-rw-r--r-- 1 root root 48 11月 1 07:48 20-ctype.ini
-rw-r--r-- 1 root root 46 11月 1 07:48 20-curl.ini
-rw-r--r-- 1 root root 46 11月 1 07:48 20-exif.ini
-rw-r--r-- 1 root root 54 11月 1 07:48 20-fileinfo.ini
-rw-r--r-- 1 root root 44 11月 1 07:48 20-ftp.ini
-rw-r--r-- 1 root root 52 11月 1 07:48 20-gettext.ini
-rw-r--r-- 1 root root 48 11月 1 07:48 20-iconv.ini
-rw-r--r-- 1 root root 54 11月 1 07:48 20-mbstring.ini <---- 追加されています
-rw-r--r-- 1 root root 52 11月 1 07:48 20-mysqlnd.ini
-rw-r--r-- 1 root root 44 11月 1 07:48 20-pdo.ini
-rw-r--r-- 1 root root 46 11月 1 07:48 20-phar.ini
-rw-r--r-- 1 root root 52 11月 1 07:48 20-sockets.ini
-rw-r--r-- 1 root root 52 11月 1 07:48 20-sqlite3.ini
-rw-r--r-- 1 root root 56 11月 1 07:48 20-tokenizer.ini
-rw-r--r-- 1 root root 44 11月 1 07:48 20-zip.ini
-rw-r--r-- 1 root root 50 11月 1 07:48 30-mysqli.ini
-rw-r--r-- 1 root root 56 11月 1 07:48 30-pdo_mysql.ini
-rw-r--r-- 1 root root 58 11月 1 07:48 30-pdo_sqlite.ini
[ec2-user@ip-10-0-10-127 /]$
こちらにも追加されました。
他に追加したいモジュール(例えば画像処理系のGDなど)があった場合には、同様の手順で行うことができます。
まとめ
今回は作業は少なかったですが、phpのモジュールについて調べてみました。
Laravel9のためのモジュールの追加編をPHPのモジュールの確認とインストール(Laravel9編)で書きましたので、そちらも参考にしていただければと思います。
各ライブラリの詳細をみると、様々なメソッドがあることがわかり、今までプログラムを組んでいたときに、他のサイトを参考にして組んでいるときなどに、突然出てくるメソッドがここで組み込まれていたということを知るにいたり、少し感動しました。
さて、今回確認したphpをインストールした際に依存ファイルとしてインストールされたファイルの一覧は下記になります。
[ec2-user@ip-10-0-10-127 /]$ sudo yum list installed | grep php8.0
php-cli.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php-common.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php-fpm.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php-mysqlnd.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php-pdo.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
[ec2-user@ip-10-0-10-127 /]$
今回の確認で、phpをインスールした際の依存ファイルのうち「php-common」は、各種モジュールが含まれていること、「php-mysqlnd」は名称からmysqlndモジュール、同様に「php-pdo」はpdoモジュールなのだと理解できます。
あと、二つのファイル「php-cli」と「php-fpm」は登場してきませんでした。この二つはphpの実行ファイルなのですが、それぞれ役割が違うようです。
次回は、php-cliとphp-fpmについて確認していこうと思います。

文責:フライング・ハイ・ワークス代表 松田 治人(まつだ はるひと)
会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによるWebアプリケーションの構築や東京でホームページ制作をしています。
エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。
WEBサイト・ホームページの制作をご検討の方
フライング・ハイ・ワークスの紹介
フライング・ハイ・ワークスは、東京のホームページ制作・Web制作会社・システム開発会社です。東京都及びその近郊(首都圏)を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース(レスポンシブ対応)で制作します。
実績
デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。
また、SEOやランディングページ(LP)、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。
500点以上のフライング・ハイ・ワークスの制作実績ページをご覧ください。
ホームページ制作・Web制作のお問い合わせ、お見積り依頼、相談、質問は
お問い合わせフォームよりお願いいたします