Pear / Composer

Pear 状況確認

Ubuntu 20 から Ubuntu 22 に自動アップデ-トが実行されました。
その後、Pear:Calendar が動かなくなりました。
その原因を調査しましたので、まとめておきます。
調査にあたっては PEAR が動作するかどうかの確認 が参考になりました。
このサイトは Pear について詳細に書いてあるのですか、その構成が非常にわかりづらい。
必要な情報がどこにあるのか全くわからないのが玉にきずです。
今回参考となる部分は以下のような構成になっています。

PEAR Manual
|  https://phpspot.net/php/man/pear/
└ インストール
   | https://phpspot.net/php/man/pear/installation.html
    └ Checking if PEAR works
      https://phpspot.net/php/man/pear/installation.checking.html
  

コマンドラインツール確認

コマンドラインツールで PEAR のインスト-ル状況を確認します。
端末画面で
$ pear
とするとコマンド情報が沢山表示されたら Ok です。

yamada@ubuntu-22:~$ pear
Commands:
build        Build an Extension From C Source
bundle       Unpacks a Pecl Package
channel-add  Add a Channel
  ~~~
Type "pear help shortcuts" to list all command shortcuts.
Type "pear help version" or "pear version" to list version information.
Type "pear help <command>" to get the help for the specified command.

PEAR が最新であることを確認

端末画面で
$ pear version
とすると PEAR バージョンを確認できます。
$ pear version
PEAR Version: 1.10.12
PHP Version: 8.1.2
Zend Engine Version: 4.1.2
Running on: Linux ubuntu-20 5.15.0-46-generic ・・・①
#49-Ubuntu SMP Thu Aug 4 18:03:25 UTC 2022 x86_64
ただ ①の部分で ubuntu-20 で動作中と表示されたのにはちょっと気になりました。

PEAR .phpファイルインストール場所確認

PEAR が .php ファイルをインストールする場所を探します。
端末画面で
$ pear config-get php_dir
/usr/share/php ・・・②
確認してみるとこのフォルダに Calendar も存在していました。

PHP インストールで使用されている構成ファイル

PHP インストールで使用されている構成ファイルを見つけます。
端末画面で

$ php --ini
Configuration File (php.ini) Path: /etc/php/8.1/cli
Loaded Configuration File:         /etc/php/8.1/cli/php.ini ・・・③
Scan for additional .ini files in: /etc/php/8.1/cli/conf.d
Additional .ini files parsed:      /etc/php/8.1/cli/conf.d/10-opcache.ini,
/etc/php/8.1/cli/conf.d/10-pdo.ini,
/etc/php/8.1/cli/conf.d/15-xml.ini,
  ~~~~
/etc/php/8.1/cli/conf.d/20-xmlwriter.ini,
/etc/php/8.1/cli/conf.d/20-xsl.ini

ini ファイルのありかがわかりました。
③がメインの ini ファイルの所在地になります。

PEAR ファイルの場所

PEAR ファイル例えば Calendar のなかにある Weekdays.php は
/usr/share/php/Calendar/Month/Weekdays.php
にあります。
よって、PHP には
/usr/share/php
のディレクトリにいって Calendar/Month/Weekdays.php を探してもらう必要があります。

PHP の include_path 設定

PHP の include_path 設定を確認します。
PHP はインクルードするファイルを探す際にインクルードパスの各エントリを個別に調べます。
まず最初のパスを調べ、見つからなければ次のパスを調べ、PEAR ファイルが探します。
なければ E_WARNING あるいは E_ERROR が発生します。
インクルードパスを実行時に変更したり設定したりするには set_include_path() を使用します。
コマンドラインで include_path を探します。
php -c
php.ini を探すディレクトリを指定します。
-r  RUNオプション
このオプションにより、コマンドラインのみで PHP を実行します。
端末画面で
$ php -c /path/to/php.ini -r 'echo get_include_path()."\n";'
とすると PHP の include_path 設定を確認することができます。
.:/usr/share/php ・・・④
であることが判明しました。
これは②と同じでした。
PEAR の php_dir はインクルードパスにある必要がありますが、現状は どうもそうではなさそうです。
システムの php.ini ③にパス追加をする必要がありそうです。

php.ini の変更

PEAR を正しく動作させるには、PHP の include_path を調整する必要があります。
$ php --ini で見つけた ③
/etc/php/8.1/cli/php.ini
をエディタで開きます。
$ sudo nano /etc/php/8.1/cli/php.ini
開いたら、include_path という行を検索します。
真ん中当たり、前から探します。
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
を手がかりに探します。
740行目にあります。
;include_path=".:/usr/share/php"
となっていました。
; を外し④に変更します。
include_path=".:/usr/share/php/
CGI で PHP 動作させるときはこれで良いはずです。
要するに、/usr/share/php に System.php があるのでそこのディレクトリをパスに指定するだけです。

php.ini の変更Ⅱ

php 情報確認確認 URL
http://localhost:8080/info.php
http://localhost:8080/~yamada/info.php
http://v-host.jp/info.php
ブラウザで上記のいずれかで確認した
PHP バージョン情報の構成ファイル(php.ini)のパスにある
/etc/php/8.1/apache2/php.ini
を変更します。
$ sudo nano /etc/php/8.1/apache2/php.ini
とし前項と同じく、740行目にある
;include_path=".:/usr/share/php"
を、; を外し④に変更します。
include_path=".:/usr/share/php/

php.ini の変更後の処理

php.ini を変更したら、Web サーバー(Ubuntu22)を再起動する必要があります。
ただ、apache2 だけなら
$ sudo service apache2 restart
でもよいようです。

複数の include_path 追加

ちなみに php.ini に二つの include_path を追加したいとき時の例を示します。
include_path = ".:/usr/share/php:/home/****/・・・"

結論

ここまでいろいろ調査しましたが結局
Calendar/Month/Weekdays.php
は、PHP8.1 では build メソッドがうまく動かないとの結論にいたりました。
$Month->build(); ⇒×
どうもインクルードパスの問題ではなかったようです。
結局徒労に終りました。
勉強にはなりました。


  • Composer インスト-ル に進む
  • Pear インスト-ル に戻る
  • 70VPS に戻る