XAMPP × FuelPHPでPHP開発環境を構築してみた

## 概要
FuelPHPのWebアプリケーションをWindowsのローカル環境で実行するための環境を構築します。

## 環境
- Windows10 Pro
- XMAPP v7.3.12
- Fuel PHP v1.8.2
※2019/12/16現在の最新版

## 1. XAMPPインストール
[XAMPP Installers and Downloads for Apache Friends](https://www.apachefriends.org/jp/index.html)からダウンロード・インストールを実施

![キャプチャ_01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/1342a4cc-8c59-7a59-d13a-9646ebb45c1e.png)


インストーラを起動したら、インストールの実行をします。

![キャプチャ_02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/1bc57920-81df-b9ff-3d2c-a66c62e57606.png)

![キャプチャ_03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/ab775da5-e495-74a8-b3a8-99b3266de8c6.png)
![キャプチャ_04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/8d28b29d-8471-7414-db9a-e080ce5b7ff3.png)
![キャプチャ_05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/88d0cd67-f176-1140-fd22-ca4e3542ae73.png)
![キャプチャ_06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/9d08e4df-ce27-64b4-0925-f2057c6648a3.png)
![キャプチャ_07.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/d76b8a10-ddac-66dc-2b2d-9a34b49a59c7.png)


インストールが完了し、XAMPP Control Panelが起動されるkとを確認します。

![キャプチャ_08.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/e2b4c581-2343-4e1c-bbed-8644b7416bde.png)
※上記では、port:8080が使用中であったため、tomcatが起動しませんでした。

## 2. XAMPP起動確認

XAMPP Control PanelでApacheを起動し、疎通確認を行います。

![キャプチャ_09.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/bbe03c6e-4b06-c868-fed8-a3ae0e96b683.png)

http://localhost にアクセスし、以下のようなページが表示されれば疎通確認完了です。

![キャプチャ_10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/9ca0df90-5ce3-e9cf-297c-3b87aecf816f.png)

## 3. PHPインストール確認
XAMPPをインストールすることで、あわせてPHPのインストールもインストールされています。

PHPを実行するために、システム環境変数のPathに`C:/xampp/php`を追加します。
![キャプチャ_11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/d1c56da9-63bd-15c6-73f0-3890e42a7c90.png)


端末の再起動を行い、以下のコマンドでPHPのバージョンが表示されることを確認します。

```terminal
>php -v
PHP 7.3.12 (cli) (built: Nov 19 2019 13:58:02) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.12, Copyright (c) 1998-2018 Zend Technologies
```

## 4. FuelPHPダウンロード
[FuelPHP » A simple, flexible, community driven PHP5.3 framework.](https://fuelphp.com/)からFuelPHP v1.8.2のダウンロードをします。
![キャプチャ_12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/735e9c83-d592-dd1e-aebb-4b512137c876.png)


ダウンロードした「fuelphp-1.8.2.zip」を`C:/xampp`配下に回答します。

![キャプチャ_13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/89273ca3-276a-6a10-dc1d-3726f22afdde.png)


## 5. Fuel PHPのシンボリックリンク作成
FuelPHPでの作業フォルダをXAMPP管理のApacheから参照できるようにシンボリックリンクを作成します。

```terminal
> cd C:\xampp\htdocs
>>mklink /d public "C:workspace\sample-project/public"
```

## 6. composerで依存ライブラリの最新化
FuelPHP v1.6からcomposerを使用して依存ライブラリのダウンロードを行います。
そのため、先ずはcomposerを最新版にupdateします。

```terminal
> cd C:\xampp\fuelphp-1.8.2
>php composer.phar self-update 
```

私の場合は、updateする前のcomposerのversionが1.6.4であった。
```terminal
>php composer.phar -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.6.4 2018-04-13 12:04:24
```

このバージョンで、self-updateを行うと、Exceptionが発生することを確認しています。

```terminal
>php composer.phar self-update
Updating to version 1.9.1 (stable channel).
   Downloading (100%)


  [RuntimeException]
  SHA384 is not supported by your openssl extension, could not verify the phar file integrity


self-update [-r|--rollback] [--clean-backups] [--no-progress] [--update-keys] [--stable] [--preview] [--snapshot] [--set-channel-only] [--] [<version>]
```

[SHA384 is not supported by your openssl extension, · Issue #7802 · composer/composer · GitHub](https://github.com/composer/composer/issues/7802)

そのため、手動でcomposerのself-updateを行います。

[Composer](https://getcomposer.org/download/)

```terminal
>php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
>php -r "if (hash_file('sha384', 'composer-setup.php') === 'baf1608c33254d00611ac1705c1d9958c817a1a33bce370c0595974b342601bd80b92a3f46067da89e3b06bff421f182') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
>php composer-setup.php
>php -r "unlink('composer-setup.php');"
```
composerのself-updateが完了後、最新版のcomposerで依存ライブラリのダウンロードを行います。

```terminal
>php composer.phar update
>Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 15 installs, 0 updates, 0 removals
  - Installing composer/installers (v1.7.0): Downloading (100%)
  - Installing fuelphp/upload (2.0.6): Downloading (100%)
  - Installing michelf/php-markdown (1.7.0): Downloading (100%)
  - Installing psr/log (1.1.2): Downloading (100%)
  - Installing monolog/monolog (1.25.2): Downloading (100%)
  - Installing paragonie/random_compat (v9.99.99): Loading from cache
  - Installing paragonie/sodium_compat (v1.12.1): Loading from cache
  - Installing phpseclib/phpseclib (2.0.23): Downloading (100%)
  - Installing fuel/core (1.8.2): Downloading (100%)
  - Installing fuel/auth (1.8.2): Downloading (100%)
  - Installing fuel/email (1.8.2): Downloading (100%)
  - Installing fuel/oil (1.8.2): Downloading (100%)
  - Installing fuel/orm (1.8.2): Downloading (100%)
  - Installing fuel/parser (1.8.2): Downloading (100%)
  - Installing fuel/docs (1.8.2): Downloading (100%)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
paragonie/sodium_compat suggests installing ext-libsodium (PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.)
paragonie/sodium_compat suggests installing ext-sodium (PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.)
phpseclib/phpseclib suggests installing ext-libsodium (SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.)
phpseclib/phpseclib suggests installing ext-mcrypt (Install the Mcrypt extension in order to speed up a few other cryptographic operations.)
phpseclib/phpseclib suggests installing ext-gmp (Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.)
Writing lock file
Generating autoload files
```

## 7. 疎通確認

XAMPPのApacheを起動し、http://localhost/public が起動できることを確認します。

![キャプチャ_14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488212/7e4bdc0a-9428-4df0-9828-8983a14fa8e1.png)

これで、実装したエンドポイントにリクエストを送信し、期待した結果が得られれば環境構築はOKです。