こんにちは。制服屋の店長です。
Windows Server 2019にPHPとPEARをインストールするだけで、たいへんてこずってしまったので備忘録として書いておきます。Windows Server 2016でも同様だと思います。
PHPのインストール
1. PHPのダウンロードは、ここから、Windows downloadsをクリック。
VC14 x64 Non Thread SafeとVC14 x64 Thread Safeがありますが、VC14 x64 Non Thread SafeはWebサーバにIISを使う場合に選択します。
VC14 x64 Thread SafeはWindows版Apache HTTPサーバを使う場合のみ選びます。
2. zipをc:\PHPに展開し環境変数でPATHを通す。
3. C:\PHP\php.ini-productionをphp.iniに名前を変更。
不親切な説明ですが詳しくは他のサイトで調べてね(無責任)
PEARパッケージマネージャのインストール
1. C:\PHP\PEARフォルダを作成する。
2. http://pear.php.net/go-pear.phar←右ボタンクリックして「名前を付けてリンク先を保存」で先のC:\PHP\PEARフォルダ内を指定。
3. コマンドプロンプトを管理者で実行します。
c:\users\youraccount> cd c:\php
c:\PHP>php -d output_buffering=0 PEAR\go-pear.phar
でインストールします。すると、
Are you installing a system-wide PEAR or a local copy?
(system|local) [system] :
と聞かれます。ここはEnterを入力。
Below is a suggested file layout for your new PEAR installation. To
change individual locations, type the number in front of the
directory. Type 'all' to change all of them or simply press Enter to
accept these locations.
1. Installation base ($prefix) : c:\PHP
2. Temporary directory for processing : c:\PHP\tmp
3. Temporary directory for downloads : c:\PHP\tmp
4. Binaries directory : c:\PHP
5. PHP code directory ($php_dir) : c:\PHP\pear
6. Documentation directory : c:\PHP\docs
7. Data directory : c:\PHP\data
8. User-modifiable configuration files directory : c:\PHP\cfg
9. Public Web Files directory : c:\PHP\www
10. System manual pages directory : c:\PHP\man
11. Tests directory : c:\PHP\tests
12. Name of configuration file : C:\Windows\pear.ini
13. Path to CLI php.exe :
1-13, 'all' or Enter to continue: 13
となります。ここでインストールするフォルダを選びますが、13. Path to CLI php.exe :だけ空欄なので、ここで
13
と入力。すると、フォルダ選択のダイアログボックスが出てくるので、C:\PHPを選んでください。これでインストールできます。
コマンドプロンプトが管理者で実行されていなければ、ここで
Beginning install...
PEAR_Config::writeConfigFile fopen('C:\Windows\pear.ini','w') failed (fopen(C:\Windows\pear.ini): failed to open stream: Permission denied)
というエラーになります。コマンドプロンプトを管理者で実行しているときちんとインストールできると思います。
PEARパッケージのインストールでエラーに遭遇
さてここからが本題です。上記まではいろんなサイトを見ればもっと詳しく調べることが出来ますが、ここからはあまり情報がなく、手こずったので備忘録です。
C:\PHP>pear install HTTP_Request
でインストールしようとすると、
No releases available for package "pear.php.net/HTTP_Request"
install failed
というエラーメッセージが出てインストールできません。チャンネルの更新をしようとしても、
c:\PHP>pear channel-update pear.php.net
Updating channel "pear.php.net"
Channel "pear.php.net" is not responding over http://, failed with message: Connection to `ssl://pear.php.net:443' failed: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?
Trying channel "pear.php.net" over https:// instead
Cannot retrieve channel.xml for channel "pear.php.net" (Connection to `ssl://pear.php.net:443' failed: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?)
というエラーメッセージで止まってしまいます。
PEARパッケージのインストールでエラーが出たらphp.iniを疑おう
ファイアウォールを疑ったり、いろいろやってみましたが、結論から言えば、php.iniを修正すればいけます。
;extension_dir = "ext"
この行のコメントアウトを外してください。僕のバージョン(7.3.5)では760行目でした。
次に、
;extension=openssl
この行のコメントアウトも外してください。僕のバージョン(7.3.5)では927行目でした。
最後に、
;date.timezone =
この行は、コメントアウト後、
date.timezone = "Asia/Tokyo"
このように指定します。
これで改めてインストールを試みると、
C:\PHP>pear install HTTP_Request
WARNING: "pear/HTTP_Request" is deprecated in favor of "pear/HTTP_Request2"
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
WARNING: "pear/Net_URL" is deprecated in favor of "pear/Net_URL2"
downloading HTTP_Request-1.4.4.tgz ...
Starting to download HTTP_Request-1.4.4.tgz (17,233 bytes)
......done: 17,233 bytes
downloading Net_URL-1.0.15.tgz ...
Starting to download Net_URL-1.0.15.tgz (6,393 bytes)
...done: 6,393 bytes
downloading Net_Socket-1.2.2.tgz ...
Starting to download Net_Socket-1.2.2.tgz (6,903 bytes)
...done: 6,903 bytes
install ok: channel://pear.php.net/Net_URL-1.0.15
install ok: channel://pear.php.net/Net_Socket-1.2.2
install ok: channel://pear.php.net/HTTP_Request-1.4.4
無事インストールできました!
HTTP_Requestで実行時エラーが出る
PEAR HTTP_Requestを使ったコードを実行すると、
PHP Parse error: syntax error, unexpected 'new' (T_NEW) in C:\PHP\PEAR\HTTP\Request.php on line 412
こんなエラーが出ることがあります。そんな時は、C:\PHP\PEAR\HTTP\Request.phpを開き、
&new
で検索。412行目、749行目、794行目に見つかるので、
&
を削除し、
new
だけにします。さらに736行目
& new
こうすればいけるようになります。PHPのバージョンによる文法の違いだそうです。文法を頻繁に変えるのやめて欲しい・・・。