Windows10にPHPをインストールする方法

- 環境
    - Windows10 Pro 64bit

# ダウンロードする
## PHP本体
1. [PHP For Windows: Binaries and sources Releases](https://windows.php.net/download#php-7.3)からPHP7.3「VC15 x86 Thread Safe」のzipファイルをダウンロードする
    - 今回ダウンロードしたのは、`php-7.3.14-Win32-VC15-x86.zip`
1. zipファイルを解凍して任意のフォルダに配置する
    - 今回は、`C:\apps`配下

## (使う場合は)XDebug

1. [Xdebug: Downloads](https://xdebug.org/download)から「PHP 7.3 VC15 TS (32 bit)」のdllをダウンロードする
    - 今回ダウンロードしたのは、`php_xdebug-2.9.1-7.3-vc15.dll`
1. ダウンロードしたdllを `C:\apps\php-7.3.14-Win32-VC15-x86\ext` 配下に配置する

## (使う場合は)APCU

1. [PECL :: Package :: APCu](https://pecl.php.net/package/APCu)から「Version 5.1.17のDLL」を選択する
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159761/d04437b6-8825-f6ea-de0b-da6b193f8c34.png)
1. PHP7.3の「7.3 Thread Safe (TS) x86」リンクでzipファイルをダウンロードする
    - 今回ダウンロードしたのは、`php_apcu-5.1.17-7.3-ts-vc15-x86.zip`
1. zipファイルを解凍して格納されているdllを `C:\apps\php-7.3.14-Win32-VC15-x86\ext` 配下に配置する


# php.iniを作成する
1. `C:\apps\php-7.3.14-Win32-VC15-x86` 配下にある `php.ini-production` または `php.ini-development` をコピーして `php.ini` を作成する
    - `php.ini-production` と `php.ini-development` のどちらを使うかは [php.ini-development と php.ini-production の違い。 | シカでした。](http://blog.pdns.jp/php-ini-development-%E3%81%A8-php-ini-production-%E3%81%AE%E9%81%95%E3%81%84%E3%80%82/) などを参考にするとよいと思う。
1. 以下部分を環境に合わせて記載する

```ini
...省略...
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir="C:\apps\php-7.3.14-Win32-VC15-x86\ext"
...省略...
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir="C:\apps\php-7.3.14-Win32-VC15-x86\tmp"
...省略...
; http://php.net/session.save-path
session.save_path="C:\apps\php-7.3.14-Win32-VC15-x86\tmp"
...省略...↓ここからは追記↓...
[XDebug]
zend_extension = "C:\apps\php-7.3.14-Win32-VC15-x86\ext\php_xdebug-2.9.1-7.3-vc15.dll"
xdebug.profiler_output_dir = "C:\apps\php-7.3.14-Win32-VC15-x86\tmp"
xdebug.remote_log="C:\apps\php-7.3.14-Win32-VC15-x86\tmp\xdebug.txt"
xdebug.trace_output_dir = "C:\apps\php-7.3.14-Win32-VC15-x86\tmp"
```

# PATHを通す
1. Windows環境変数(PATH)に`C:\apps\php-7.3.14-Win32-VC15-x86`を設定する
    - [Windows 10でPATHを通す設定手順と仕組み・便利な使い方・whereコマンドを解説 | 俺の開発研究所](https://itlogs.net/windows-10-path/)
1. 確認としてPHPのバージョンを確認してみる

```bash
$ php -v
PHP 7.3.14 (cli) (built: Jan 21 2020 13:17:19) ( ZTS MSVC15 (Visual C++ 2017) x86 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.9.1, Copyright (c) 2002-2020, by Derick Rethans
```

## 失敗したこと
- [PHPでUnable to load dynamic library 'oci8_12c'となった時の対応方法 - Qiita](https://qiita.com/ponsuke0531/items/fae6b9a64163cef51d2e)

# Apacheに設定する
1. [Apacheをインストールする](https://qiita.com/ponsuke0531/items/7c9273776f9f17d320a4)

## httpd.confにPHPを設定する
1. `conf`フォルダ配下の`httpd.conf`を開く
1. 下のほうに以下を追記する
    - [いろんなPHPのバージョンを使う場合はPHPの設定を別ファイルにすると便利](https://qiita.com/ponsuke0531/items/e27c3dafcc9741ef3e73)

```conf
# PHP
LoadModule php7_module "C:/apps/php-7.3.14-Win32-VC15-x86/php7apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/apps/php-7.3.14-Win32-VC15-x86"
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
```

## 確認してみる
### テスト用ファイルを作成する
1. DocumentRootに以下の内容で`phpinfo.php`(テスト用ファイル)を作成する
    - DocumentRootは`httpd.conf`に設定されており、`DocumentRoot "${SRVROOT}/htdocs"`(初期値)となっている場合は`C:\apps\httpd-2.4.41-o111c-x86-vc15-r2\Apache24\htdocs`となる

```php:phpinfo.php
<?php phpinfo(); ?>
```

### Apacheを起動する
```bash
$ sc start Apache2.4

SERVICE_NAME: Apache2.4
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 2  START_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x7d0
        PID                : 10060
        FLAGS              :
```

### 確認してみる
http://localhost/phpinfo.php を表示してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159761/ad617728-cc27-54c9-14a9-30c4715bc8a1.png)