PHP 7.1 設定

# はじめに

[CentOS 7 minimal インストール ～ LAMP 構築まで](http://qiita.com/wreath/items/f9d6b2128d7a5bf5a2f1)

こちらは上の記事の続きとなります。

# php.ini 設定
設定ファイルを編集します。

```
[root@localhost ~]# vim /etc/php.ini
```

以降各セクションごとに解説していきます。

## [PHP] セクション
### expose_php
レスポンスヘッダに含まれる PHP バージョン情報の表示を制御します。
セキュリティ上の理由から Off が良いでしょう。

```ini:
;expose_php = On
expose_php = Off
```


### max_execution_time
PHP スクリプトのタイムアウト時間です。
スクリプトの実行時間が上記秒数を超えるとエラーとなるので、長時間実行する必要がある場合は変更して下さい。
なお Apache 側にも Timeout ディレクティブがあるのでそちらも変更する必要があります。（デフォルト 60 秒）
0 を指定すると無制限になります。

```ini:
max_execution_time = 30
```

### max_input_time
PHP が GET, POST リクエストを解析する際のタイムアウト時間です。
例えばファイルをアップロードしようとした場合、アップロードに 60 秒以上かかるとエラーになります。
-1 を指定すると無制限になります。

```ini:
max_input_time = 60
```

### memory_limit
PHP が使用できるメモリの最大数を定義します。
ファイルアップロードを行う場合、アップロードする最大サイズ [post_max_size](#post_max_size) より大きな値を指定するのが良いでしょう。
小さい値を指定しても動きますがメモリ効率が悪くなるかもしれません。

```ini:
memory_limit = 128M
```

### error_reporting
表示するエラー種別を設定します。
開発環境では全てのエラーを表示する E_ALL を推奨します。

```ini:
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL
```


### display_errors / display_startup_errors
エラー表示を制御します。
display_errors は実行中に発生したエラーを、display_startup_erros は実行前に発生したエラーの表示を制御します。
開発環境では On にしておいたほうがデバッグが楽になります。

```ini:
;display_errors = Off
display_errors = On

#display_startup_errors = Off
display_startup_errors = On
```

### error_reporting
エラーログの保存ファイル名を指定します。
指定が無い場合は Apache のエラーログ（/var/log/httpd/error_log）に記録されます。
ディレクトリは自動で作成されないのであらかじめ作成しておく必要があります。

```ini:
;error_log = php_errors.log
error_log = /var/log/php/error.log
```

### post_max_size
POST リクエストで送信できるサイズの上限です。
ファイルアップロードを行う場合はこの値以下までしかアップロード出来ません。
[memory_limit](#memory_limit) も参照して下さい。

```ini:
post_max_size = 8M
```

### default_charset
htmlspecialchars() 等で encoding パラメータを省略した場合この値が使用されます。
また mbstring.internal_encoding が未設定の場合もこの値が使用されます。

更に Content-Type ヘッダにここで指定された値が強制的に設定されます。
Meta タグが効かなくなってしまうので、UTF-8 以外を利用したい場合は header() で Content-Type を正しく指定する必要があります。

```ini:
default_charset = "UTF-8"
```

### file_uploads / upload_tmp_dir
ファイルアップロードを有効化するかどうかです。
upload_tmp_dir はファイルがアップロードされるディレクトリを指定します。
未指定もしくは PHP 実行ユーザーが書き込めない場所の場合はシステムのデフォルト /tmp に書き込まれます。

```ini:
file_uploads = On
;upload_tmp_dir =
```

### upload_max_filesize
アップロード出来るファイルの最大サイズを指定します。
[post_max_size](#post_max_size) より小さな値でなければいけません。

```ini:
upload_max_filesize = 2M
```

## [Date] セクション
### date.timezone
タイムゾーン設定が無いと実行時に Warning が発生するので必須設定です。

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

## [mail function] セクション
### mail.add_x_header
メールヘッダに X-PHP-Originating-Script が追加されるのを無効にします。
このヘッダにはファイル名が記述されてしまうためセキュリティ上無効にしたほうが良いでしょう。

```ini:
#mail.add_x_header = On
mail.add_x_header = Off
```

### mail.log
mail() 実行ログを記録するファイルを指定します。

```ini:
;mail.log =
mail.log = /var/log/php/mail.log
```

## [Session] セクション
### session.save_path
セッションファイルの保存先を設定します。
未指定の場合は /tmp となります。

```ini:
;session.save_path = "/tmp"
session.save_path = "/var/lib/php/session"
```

もし複数のアプリケーションを設置する場合、アプリケーションごとに save_path を変更するべきです。
そうしないとセッションの自動削除（ガーベージコレクション）が他のアプリの設定に影響されてしまうためです。
ガーベージコレクションの詳しい動作は下記のサイトを参照して下さい。
[PHPプロ！TIPS+ セッションのガーベッジコレクションをテストする](http://www.phppro.jp/phptips/archives/vol41/2)


# 追加モジュール
## PEAR
PHP ライブラリ PEAR をインストールします。

```
[root@localhost ~]# yum install --enablerepo=remi,remi-php71 php-pear
```

## MySQLi
MySQL 改良版拡張モジュールをインストールします。

```
[root@localhost ~]# yum install --enablerepo=remi,remi-php71 php-mysqli
```

## mbstring
日本語処理に必要となる mbstring をインストールします。

```
[root@localhost ~]# yum install --enablerepo=remi,remi-php71 php-mbstring
```

インストールが完了したら php.ini の [mbstring] セクションを編集します。

```ini:
;mbstring.language = Japanese
mbstring.language = Japanese

;mbstring.detect_order = auto
mbstring.detect_order = auto
```

## bcmath
高精度演算で必要になる bcmath をインストールします。

```
[root@localhost ~]# yum install --enablerepo=remi,remi-php71 php-bcmath
```

厳密な小数計算を行う場合に利用出来ます。
詳しくは下記サイトをご確認下さい。
[PHPの演算誤差](http://www.pahoo.org/e-soul/webtech/php01/php11-01.shtm)

## Memcached
Memcached モジュールをインストールします。

```
[root@localhost ~]# yum install --enablerepo=remi,remi-php71 php-pecl-memcached
```

以下のコードで動作確認出来ます。
**success!** と表示されれば OK です。

```php:
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
$m->set('test', 'success!');
echo $m->get('test') ?: 'failed';
$m->delete('test');
```

## LDAP
LDAP モジュールをインストールします。

```
[root@localhost ~]# yum install --enablerepo=remi,remi-php71 php-ldap
```

## GD
画像処理モジュールをインストールします。

```
[root@localhost ~]# yum install --enablerepo=remi,remi-php71 php-gd
```