Windows+Apache+CakePHP3 環境構築

# Windows+Apache+CakePHP3 環境構築

# 環境
* Windows Server 2016 64bit ja
* Apache 2.4.23
* PHP 7.0.12
* PostgreSQL 9.6.0

# サーバ構築
## Apache
参考
http://www.adminweb.jp/apache/

Apache LoungeからWindows版Apacheを入手する。
https://www.apachelounge.com/

Apacheバージョンに合ったVisual C++ 再頒布可能パッケージをインストールする。

Apache24を解凍し、C直下に配置する。

必要ならhttpd.confのServerRoot, DocumentRoot, ServerName等を環境に合わせて書き換える。

必要なら使用するポートを変更する。

```conf:httpd.conf
Listen 80
```

サービスに登録して起動する。
コマンドプロンプトでhttpd.exeがあるディレクトリで以下のコマンドを実行。

```
httpd -k install
httpd -k start
```

外部からアクセスする場合、80番ポートを開放する。
http://symfoware.blog68.fc2.com/blog-entry-1231.html

Windowsが64bitの場合、Apacheのバグでサーバー不調になる可能性がある。
あらかじめ以下の作業を行っておいた方がよい。
http://toshy7302104.cocolog-nifty.com/soliloquist/2015/10/apache-win64-c7.html
https://ah-2.com/2015/07/30/apache_win_not_respond.html

## PHP
PHPディレクトリをC直下に配置する。

モジュール追加する。

```conf:httpd.confのDSOセクション
LoadModule php7_module c:/php/php7apache2_4.dll
```

拡張子を登録する。

```conf:http.confの最後
<FilesMatch "\.php$">
  AddHandler php7-script .php
  AddType application/x-httpd-php .php
</FilesMatch>
```

php.iniの場所を指定する。
php.ini-development または php.ini-production をコピーして php.ini にリネームする。

```conf:http.confの最後に
PHPIniDir "c:/php"
```

拡張モジュールのディレクトリ設定

```ini:php.ini
extension_dir = "c:\php\ext"
```

タイムゾーンの設定

```ini:php.ini
date.timezone = Asia/Tokyo
```

Windowsのシステム環境変数PathにPHPの場所を追加する。

Apacheを再起動する。

## PostgreSQL
参考
http://lets.postgresql.jp/documents/tutorial/windows/
インストーラからインストールする。
- Port: 5432
- Locale: C

```ini:php.ini
extension=php_pdo_pgsql.dll
```

デフォルトでは postgres というDBができている。
必要に応じてユーザ、DBを作成しておく。

さらにデフォルトではローカルからしかDBにアクセスできないので、外部からアクセスするなら以下の設定を行う。
http://qiita.com/seagal18/items/23977bd5d49c140f83ea

# CakePHP3導入
## 前準備
**Apache**
mod_rewriteを有効化

```conf:httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
```

.htacessの設定

```conf:httpd.conf
<Directory "c:/Apache24/htdocs">
～～～
</Directory>

この下に追記

<Directory "C:/Apache24/htdocs/cakephp(プロジェクト名)">
    Options FollowSymLinks
    AllowOverride All
</Directory>
```

**PHP**
mbstringを有効化

```ini:php.ini
extension=php_mbstring.dll
```
```ini:php.ini
[mbstring]
mbstring.language = Japanese
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.substitute_character = none
mbstring.func_overload = 0
```

intlを有効化

```ini:php.ini
extension=php_intl.dll
```
```ini:php.ini
intl.default_locale = en_utf8
intl.error_level = E_WARNING
```

openSSLを有効化

```ini:php.ini
extension=php_openssl.dll
```

**Composer**
インストーラでインストールしてサーバ再起動。

## セットアップ
**プロジェクト作成**
コマンドプロンプトでC:\Apache24\htdocsに移動し、以下のコマンドを実行する。

```bash
composer create-project --prefer-dist cakephp/app cakephp(プロジェクト名)
```

http://localhost/cakephp/ にアクセスしてCakeの画面が出るか確認する。
この時点ではデータベースにバツマークがついているはず。

**PostgreSQL接続**

```php:cakephp\config\app.php
'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Postgres',
        'persistent' => false,
        'host' => 'localhost',
        //'port' => 'non_standard_port_number',
        'username' => 'ユーザー名',
        'password' => 'パスワード',
        'database' => 'DB名',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'flags' => [],
        'cacheMetadata' => true,
        'log' => false,
        'quoteIdentifiers' => false,
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],

        'url' => env('DATABASE_URL', null),
    ],
]
```

上記バツマークが消えることを確認する。

**検索プラグイン FriendOfCake/search**
https://github.com/FriendsOfCake/search

Conposerを使ってインストールする。
コマンドプロンプトで以下のコマンドを実行。

```bash:cakephp
composer require friendsofcake/search
```

プラグインのロード

```bash:cakephp\bin
cake plugin load Search
```