PHPやPHPを使ったLaravelなどのフレームワークを使っていると、pecl install zip
やpecl install redis
といった、「pecl install」というコマンドがでてくることがあります。
また、Dockerを使っている場合docker-php-ext-enable zip
やdocker-php-ext-enable redis
といったように「docker-php-ext-enable」という記述や「docker-php-ext-install」もでてきます。
ここでは、この「pecl」とは何か?「docker-php-ext-enable」や「docker-php-ext-install」とは何かについてまとめています。
また、「pecl」と似た用途で使われる「pear」との違いもまとめています。
peclやdocker-php-ext-enableの例
DockerにNginxとphp-fpmを使ってLaravel環境を構築する際に、php-fpm対して実行する処理の中に「pecl」や「docker-php-ext-enable」「docker-php-ext-install」が使われています。
php-fpmビルド用のDockerfileの例
RUN pecl install zip \
&& docker-php-ext-enable zip
RUN pecl install redis \
&& docker-php-ext-enable redis
RUN docker-php-ext-install pdo_mysql
peclとは何か?
「pecl」とはPHPの拡張パッケージ(拡張モジュール)を提供しているサービスです。
PHP Extension Community Libraryの略でピクルと読みます。
「pecl」を使ってパッケージのインストールした後は有効化する必要があります。
なお、php.iniで有効化した場合はサービスの再起動が必要です。
peclの使い方
peclを使うためには、次の2つのステップが必要です。
拡張機能(パッケージ)のインストール
peclはPHPにバンドルされているので、そのままコマンドとして使うことができます。
次のコマンドでパッケージをインストールできます。
$ pecl install 拡張パッケージ名[-バージョン]
バージョンの指定がなければ安定版をインストールします。
実例
$ pecl install extname-0.1
拡張機能(パッケージ)の有効化
peclでインストールしたのみではパッケージは有効になりません。
このため、別途、有効化する必要があります。
Dockerの場合
Dockerのdocker-compose.ymlなどでpeclを使っている場合は、peclでパッケージをインストールした後に、以下も記述しておく必要があります。
docker-php-ext-enable 拡張パッケージ名
このため、「pecl install」と「docker-php-ext-enable」は基本的にセットで記述されています。
実例
RUN pecl install zip \
&& docker-php-ext-enable zip
RUN pecl install redis \
&& docker-php-ext-enable redis
ローカル環境(MacやWindowsの場合)
MacやWindowsなどのローカル環境の場合は、以下の2つの方法があります。
php.iniを編集する
php.iniを開いて編集することで、拡張パッケージを有効化することもできます。
php.iniのファイルパスやファイルの存在確認
まずはphp.inファイルのパスを確認します。
#php.iniの場所を確認
$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc
php.iniが置かれるディレクトリは「/etc」であることがわかります。
次に、ファイルの存在確認をします。
#ファイルの存在確認
$ ls /etc | grep php.ini
php.ini.default
上記の場合、「php.ini.default」はありますが、「php.ini」が存在していないことがわかります。
新たにphp.iniを作成する場合は以下のように「php.ini.default」をコピーして作成します。
#ファイルの作成
$ cp /etc/php.ini.default /etc/php.ini
▼grepコマンドとは何か?
grepコマンドは前の処理結果の中で、指定した値を含む処理結果のみを表示する絞り込みコマンドです。
$ 処理 | grep 値
php.iniを編集する
「php.ini」ファイルを編集して、拡張パッケージを有効化します。
Dynamic Extensionsと書かれているところの下に;extension=拡張パッケージ名
があるので、冒頭の;
を外します。
拡張パッケージ名がない場合は、extension=拡張パッケージ名
を追記します。
以上でphp.iniの編集は完了です。
実例
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
省略
;extension=bz2
;extension=curl
;extension=fileinfo
↓ 拡張パッケージ「curl」を有効化
;extension=bz2
extension=curl
;extension=fileinfo
サービスの再起動
最後に、本番反映のため、php.iniで有効化した場合はサービスの再起動をします。
dl関数を使う
拡張パッケージを有効化する2つ目の方法は「dl関数を使う」です。
$ dl ( 拡張機能の名前 ) : true
「:」の後ろを、falseにすれば有効化を解除できます。
実例
拡張機能「curl」を有効化する場合は以下のようになります。
$ dl (curl): true
(参考)PHP公式 dl関数
pecl installとdocker-php-ext-installの違い
pecl installとdocker-php-ext-installの2つがある場合
Dockerfileによっては、pecl install
とdocker-php-ext-install
の2つが使われている場合があります。
例えば以下のような場合です。
RUN pecl install redis \
&& docker-php-ext-enable redis
RUN docker-php-ext-install pdo_mysql
なぜPHP拡張パッケージをインストールにするのにコマンドがいくつもあるのか?と疑問に思われる方も少なくありません。
pecl installとdocker-php-ext-installの違い
pecl installとdocker-php-ext-installの違いは以下の通りです。
docker-php-ext-install
docker-php-ext-install
はPHPに標準で備わっている拡張パッケージのインストール&有効化ができます。
pecl install
pecl install
はPHPに標準で備わっていないパッケージをインストールできます。
PHPに標準で備わっている拡張パッケージ一覧
PHPに標準で備わっている拡張パッケージには次のようなものがあります。
▼一例
Zip, Zlib, memcache, podなどが用意されています。
peclでinstallできる拡張パッケージ一覧
PHP標準ではなく、peclでinstallできる拡張パッケージはPECLの公式ページで検索することができます。
redis, xdebug, memcachedなどが用意されています。
peclとpearの違い
「pecl」と似たコマンドに「pear(ピア)」があります。
「pecl」も「pear」もPHPの拡張パッケージをインストールできるコマンドです。pearで用意されている拡張ライブラリはpeclでも使えます。
peclとpearの主な違いは記述されている言語と処理速度です。
pearはPHP言語で書かれているのに対して、peclはC言語で書かれています。処理速度はpeclの方が高速です。
なお、アイコンは名前にちなんで、pearは洋梨、peclはピクルスとなっています。
peclとapt-getの違い
Dockerfileによっては、apt-get install
も同時に使われている場合があります。
RUN apt-get install -y zlib1g-dev libzip-dev unzip \
&& pecl install zip \
&& docker-php-ext-enable zip
aptはDebian系Linux(DebianやUbuntuなど)のパッケージ管理ツールです。このため、apt-get
でインストールするのはOS用のパッケージです。
peclでインストールするのはPHP用のパッケージになります。
参考リンク
・PHP公式 pecl入門
・PHP公式 pecl installの使い方
・PHP公式 php.iniディレクティブ
・pecl公式 peckとは?
・docker hub公式 php-fpm