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に含まれていると記載されています。

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について確認していこうと思います。

次回:php-cliとphp-fpmの違いについて

一覧:AWS サーバー立ち上げ設定まとめ

文責:フライング・ハイ・ワークス代表 松田 治人(まつだ はるひと)
会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによるWebアプリケーションやWebサイトを構築しています。
エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。

WEBサイト制作のお問い合わせ、お見積り依頼、ご質問は
こちらのお問い合わせフォームよりお願いいたします

メールお問い合わせはこちら

フライング・ハイ・ワークスの紹介

フライング・ハイ・ワークスは、東京都渋谷区にある2000年3月創業のシステム開発にも対応できるデザインも強いWeb制作・ホームページ制作会社です。東京都及びその近郊(首都圏)を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース(レスポンシブ対応)で制作します。

実績

デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステムの構築を始め、WordPressのカスタマイズを得意としております。

また、SEOやランディングページ(LP)、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。

500点以上のフライング・ハイ・ワークスの制作実績ページをご覧ください!

採用

FHWでWebディレクター、Webデザイナー、Webプログラマーやシステム開発者として働いてみたいと思っていただける方は、下記にて定期的に募集をしておりますので、ぜひ、ご応募ください。

WEBサイト制作のお問い合わせ、お見積り依頼、ご質問は
こちらのお問い合わせフォームよりお願いいたします

メールお問い合わせはこちら