ヘルプ:日本語環境php.ini設定(CentOS7)

提供:あわ自由帳

メインページ > ヘルプ:目次 > ヘルプ:自宅サーバー構築(CentOS7)  > 日本語環境php.ini設定(CentOS7)

日本語環境でPHPを利用する場合に推奨するphp.ini設定です。

UTF-8環境

[root@host4 ~]# vi /etc/php.ini 
  • ダイナミックコンテンツの文字コードセットは必ず指定しなければならない。(セキュリティ上の理由)
default_charset = UTF-8
  • 言語環境を日本語に設定。mb_send_mail関数などの動作に影響する。
mbstring.language = japanese
  • ブラウザから送信される文字エンコーディングはcharsetと同じはず。プログラム側では必ず送信された文字エンコーディングが正当なUTF-8エンコーディングであるか確認する事。
mbstring.internal_encoding = UTF-8 
  • 現在のブラウザでHTMLを記述した文字エンコーディング以外で文字を送信してくるようなブラウザはない。(携帯などモバイル環境を除く)
mbstring.encoding_translation On

PHPでファイルのアップロード設定

アップロードできない場合

PHPでファイルがアップロードできない場合は、まずphp.iniの下記の設定を疑います。

ディレクティブ名 説明
memory_limit スクリプトが確保できる最大メモリ
post_max_size POSTデータに許可される最大サイズ
upload_max_filesize アップロードされるファイルの最大サイズ
  • アップロードしたいファイルサイズがupload_max_filesizeを超えていたら、それはもうアップロードできません。
  • 上記3つの項目が下記のような関係になるように設定しなければいけません。
memory_limit >= post_max_size >= upload_max_filesize

設定例

サーバーの搭載メモリーなど環境に応じて変えてください。
自宅サーバー(メモリ:6GB)、Apacheのhttpd.confのMaxClients設定値は100の設定例

[root@host4 ~]# vi /etc/php.ini

memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 16M

PHPが使用する最大メモリ量の計算

PHPが使用する最大メモリ量は以下の式で簡単に推計することが出来ます。

memory_limitの値 x httpd.confのMaxClientsの値 = メモリ最大使用量

memory_limitが32M, httpd.conf中のMaxClientsが100として計算すると、メモリ最大使用量は3.2GBとなります。以下が式です。

32MB x 100 = 1600 ≒ 3.2GB

kernelや他のサブシステム(PHP以外のapache module, SMTPサーバやOpenSSHサーバなど)も同様にメモリを使用するので、サーバには最低でも5GB程度の物理メモリを搭載する必要があるでしょう。

スクリプト実行時間を制限する

スクリプト実行時間を制限するのが、設定項目「max_execution_time」です。ミスなどによって処理が終了せずに延々と続いてしまうことを防ぐために使います。

[root@host4 ~]# vi /etc/php.ini

max_execution_time = 30

初期設定値は30秒です。特別な事情がない限り、この設定値が妥当だと考えます。そして、制限をなくすには「0」と設定します。

PHPを使っているという事実を隠す

PHPは、初期設定のままではそのバージョン番号をHTTPのヘッダ情報に入れるようになっています。攻撃者から見ると、PHPのバージョンが攻撃の手掛かりになることもあります。従って、バージョン番号は公開しない方がよいでしょう。

[root@host4 ~]# curl -I http://sudachi.jp/phpinfo.php
HTTP/1.1 200 OK
Date: Fri, 08 Nov 2013 21:08:11 GMT
Server: Apache
X-Powered-By: PHP/5.3.3
Vary: Accept-Encoding,User-Agent
Connection: close
Content-Type: text/html; charset=UTF-8

これを隠すには設定項目「expose_php」の値を「Off」にします。

[root@host4 ~]# vi /etc/php.ini
expose_php = On

expose_php = Off

[root@host4 ~]# systemctl restart httpd ← httpd再起動

結果確認

[root@host4 ~]# curl -I http://sudachi.jp/phpinfo.php
HTTP/1.1 200 OK
Date: Fri, 08 Nov 2013 21:11:15 GMT
Server: Apache
Vary: Accept-Encoding,User-Agent
Connection: close
Content-Type: text/html; charset=UTF-8