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(); ⇒×
   どうもインクルードパスの問題ではなかったようです。
   結局徒労に終りました。
   勉強にはなりました。