読者です 読者をやめる 読者になる 読者になる

風柳メモ

ソフトウェア・プログラミング関連の覚書が中心。

PEARのブラウザによるインストールがうまくいかなかったのでgo-pear.phpを修正

修正版のgo-pear.phpのダウンロードはこちらから

go-pear.php

furyutei/go-pear · GitHub

経緯:レンタルサーバ等のコマンドラインが使えない環境でPEARがうまくインストールできない

ホスティング環境での PEARのインストール方法に従って、go-pearをgo-pear.phpという名前でサーバ上にアップロードし、ブラウザから開いてPEARをインストールしようとしたが、途中で止まってしまう現象が発生。


具体的には、

Bootstrapping Installer...................
Bootstrapping PEAR5.php............(remote) ok
Bootstrapping PEAR.php............(remote) ok
Bootstrapping Archive/Tar.php............(remote) ok
Bootstrapping Console/Getopt.php............(remote) ok
Fatal error: Class 'PEAR' not found in /path/to/go-pear/go-pear.php on line 697

までが表示された後、エラー表示もなく停止してしまった。エラー表示を有効にした場合、Fatal errorになっていた。
プログレスバーは21%あたり。

原因と対策

go-pearのソース中、

$bootstrap_files = array(
    'PEAR5.php'            => 'https://raw.github.com/pear/pear-core/master/PEAR5.php',
    'PEAR.php'             => 'https://raw.github.com/pear/pear-core/master/PEAR.php',
    'Archive/Tar.php'      => 'https://raw.github.com/pear/Archive_Tar/master/Archive/Tar.php',
    'Console/Getopt.php'   => 'https://raw.github.com/pear/Console_Getopt/trunk/Console/Getopt.php',
);

のように定義されているファイルを download_url() という関数を使ってダウンロードしているが、実際のファイルは

https://raw.githubusercontent.com/pear/.../master/...

に存在しており(301 Moved Permanently)、download_url()がリダイレクトに未対応だったために、空ファイルとなっていた。
error_log を見ると、

PHP Fatal error:  Class 'PEAR' not found in /path/to/go-pear/go-pear.php on line 697

のようなエラーが発生していた。
そこで、download_url() を改修し、簡易的に自動リダイレクト処理をサポートすることにより対処した。
修正版のgo-pear.phpはこちら