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