好きこそものの上手なれ

他人から見れば、下手の横好きですが、そっと見守ってください。

WindowsでPHPインストール - Apacheと連携

●PHPが動作するようにする


(1) Windows用のPHPをダウンロードします。

2023-03-25時点の最新版は、PHP 8.2.4なので、ここのWindows downloadsをクリックします。

64bitのスレッドセーフ版のzipをダウンロードします。
理由はOSが64bitでApacheで使うためスレッドセーフとなります。


php-8.2.4-Win32-vs16-x64.zip
展開して、ユーザのディレクトリに移動し、PHP824とフォルダ名を変えます。
C:\Users\ユーザ\PHP824



●php.ini


あとは環境変数PATHにC:\Users\ユーザ\PHP824を追加すれば終わりですが、
php 拡張モジュールなど使うと思いますので、php.iniの作成と修正を行います。
php.exeのある場所にphp.iniを置くのですが、デフォルトでは、以下の2つがあります。
php.ini-development  (開発用 ) デバッグ時
php.ini-production (本番用) リリース時


最初はデバックするので、開発用のphp.ini-developmentをコピーし、php.iniに変更します。


①768行目あたり、コメントを外して、phpのextのディレクトリを指定。
;extension_dir = "ext"

extension_dir = "C:/Users/ユーザ/PHP824/ext"


②949行目あたり、コメントを外して、PostgreSQLを使えるようにする。
PostgreSQLのインストール設定は、後のブログでお知らせいたします。
;extension=pgsql

extension=pgsql



●ApacheとPHPの連携


もし、ApacheからPHPを使う場合は、php.iniだけ変えてもPHPの動作が変わりませんので、Apacheを再起動してください。


info.phpのファイル
    phpinfo();
?>


拡張子がphpの場合はApacheでPHPを動作させるには、Apacheのhttpd.confに以下のコードを追加します。


①195行目あたり、 LoadModule指定子がある最後の位置付近に追加


# PHPとの連携
LoadModule php_module "C:/Users/HP-EliteBook/PHP824/php8apache2_4.dll"
Loadfile "C:/Users/HP-EliteBook/PHP824/php8ts.dll"
Loadfile "C:/Users/HP-EliteBook/PHP824/libpq.dll"
PHPIniDir "C:/Users/HP-EliteBook/PHP824"
AddHandler php-script .php
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps


httpd.exeを実行して、以下のエラーが出ると、スペルミスの可能性があります。
httpd: Syntax error on line 196 of C:/Users/ユーザ/Apache24/conf/httpd.conf: Can't locate API module structure `php-module' in file C:/Users/ユーザ/PHP824/php8apache2_4.dll: No error


×  LoadModule php-module "C:/Users/ユーザ/PHP824/php8apache2_4.dll"
〇  LoadModule php_module "C:/Users/ユーザ/PHP824/php8apache2_4.dll"
ハイフンとアンダーバーの記述ミスに気を付けてください。
このばあーはアンダーバーが正しいです。


ブラウザで localhost/info.phpで以下の画面になれば、ApacheでPHPのスクリプトが動作していることになります。


ブラウザで localhost/index.phpとしなくても、 localhostでindex.phpをデフォルトで読み込むように設定するには httpd.confの317行目あたりの、index.htmlの前に index.phpを追加します。半角空白で区切します。複数ある場合は、先頭程優先されます。



    DirectoryIndex index.html


    DirectoryIndex index.php  index.html