PHP の設定のスニペット集 (php.ini, .htaccess, ini_set())

このページは、PHP の設定 (php.ini, .htaccess, ini_set()) のスニペットと、関連する設定の説明をまとめる予定のページです。

目次

注意

  • コードのライセンスは CC0 (クレジット表示不要、改変可、商用可) です。

(参考) 「変更可能」について

各設定は下記のような区分があり、どの設定ファイルで変更できるかが決まっています。

区分 php.ini httpd.conf .htaccess .user_ini ini_set()
PHP_INI_ALL
PHP_INI_USER ×? ×? ×?
PHP_INI_PERDIR ×
PHP_INI_SYSTEM × × ×

参考: PHP: どこで設定を行うのか - Manual

スニペット

文字コード設定を UTF-8 にする

php.ini
default_charset = "UTF-8"
mbstring.language = "neutral"
mbstring.internal_encoding =
mbstring.encoding_translation = off
mbstring.http_input = 
mbstring.http_output =  
.htaccess
php_value default_charset "UTF-8"
php_value mbstring.language "neutral"
php_value mbstring.internal_encoding none
php_flag mbstring.encoding_translation off
php_value mbstring.http_input none
php_value mbstring.http_output none
PHP (mb_language() などを使用しても可。mbstring.encoding_translation は PHP スクリプト内では設定不可)
ini_set('default_charset', 'UTF-8');
ini_set('mbstring.language', 'neutral');
ini_set('mbstring.internal_encoding', '');
ini_set('mbstring.http_input', '');
ini_set('mbstring.http_output', '');
項目 概要 変更可能
default_charset htmlspecialchars(), iconv, mbstring, Content-Type 等に使用されるデフォルト文字コードです。 PHP_INI_ALL
mbstring.language mb_send_mail() の件名や本文のエンコーディング設定に使用されます。基本的には neutral か Japanese かどちらか。※1 PHP_INI_ALL
mbstring.internal_encoding mb_convert_encoding() など、mbstring の各関数を使う時のデフォルト文字コードです。設定されていない場合は default_charset が使用されるので設定しなくてもよいですが、古いバージョンの PHP では 設定しておいたほうがよいかもしれません。 PHP_INI_ALL
mbstring.encoding_translation 文字コード変換をする・しない。しないほうが問題が少ないです。 PHP_INI_PERDIR
mbstring.http_input HTTP の入力文字 (GET や POST パラメータ)。設定しないほうが問題が少ないです。 PHP_INI_ALL
mbstring.http_output HTTP の出力文字を空にする。設定しないほうが問題が少ないです。 PHP_INI_ALL

※1 mbstring.language の値の一覧は PHP: mb_language - Manual に記載されています。日本語のドキュメントには一部しか記載されていません。

アップロードファイルサイズ、アップロード数の上限設定

php.ini
memory_limit = 128M
post_max_size = 128M
upload_max_filesize = 128M
max_file_uploads = 20
.htaccess
php_value memory_limit 128M
php_value post_max_size 128M
php_value upload_max_filesize 128M
php_value max_file_uploads 20

※ PHP スクリプト内では設定不可

項目 概要 変更可能
memory_limit 実行するプログラムの使用メモリの上限 PHP_INI_PERDIR
post_max_size POST データサイズの上限 PHP_INI_PERDIR
upload_max_filesize アップロードファイルサイズの上限 PHP_INI_PERDIR
max_file_uploads 同時にアップロードできるファイルの最大数 PHP_INI_PERDIR
  • 設定の値が memory_limit >= post_max_size >= upload_max_filesize の関係になるようにしておく必要があります。
    (例えば memory_limit = 1M, post_max_sizeupload_max_filesize = 128M だと memory_limit で 1M しかメモリを確保しない形になるので post_max_size, upload_max_filesize が 128M でも 1M 相当しかサイズを確保できません)
  • サイズの値は K (キロバイト), M (メガバイト), G (ギガバイト) が単位として使用できます。(512K, 128M, 2G など)

PHP のタイムアウト時間を変更する

php.ini
max_execution_time = 30
.htaccess
php_value max_execution_time 30
PHP
ini_set('max_execution_time', 30);
項目 概要 変更可能
max_execution_time PHPのプログラムがタイムアウトになる (= 強制終了される) までの時間 (秒数) PHP_INI_ALL

セッションの有効期限などを変更する

php.ini
session.save_path = "/path/to/tmp/sess"
session.cookie_lifetime = 86400
session.cookie_path = "/"
session.cookie_domain = "example.com"
session.cookie_secure = 1
session.cookie_httponly = 1
session.gc_maxlifetime = 86400
.htaccess
php_value session.save_path "/path/to/tmp/sess"
php_value session.cookie_lifetime 86400
php_value session.cookie_path "/"
php_value session.cookie_domain "example.com"
php_value session.cookie_secure 1
php_value session.cookie_httponly 1
php_value session.gc_maxlifetime 86400
PHP
ini_set('session.save_path', '/path/to/tmp/sess');
// session_set_cookie_params() は ini_set() でも可
session_set_cookie_params(
    86400, // session.cookie_lifetime
    "/", // session.cookie_path
    "example.com", // session.cookie_domain
    true, // session.cookie_secure
    true // session.cookie_httponly
);
ini_set('session.gc_maxlifetime', 86400);
項目 概要 変更可能
session.save_path セッションファイルの保存場所のパス。 PHP_INI_ALL
session.cookie_lifetime セッションクッキーの有効期限 (秒)。0だとブラウザを閉じるまでです。 PHP_INI_ALL
session.cookie_path セッションクッキーが有効になるパス (URL上のパス)。
基本は "/" で問題ないですが、フォルダごとに別システムを動かしていてセッションデータが混ざると問題がある場合は変更したほうがいいです
PHP_INI_ALL
session.cookie_domain セッションクッキーが有効になるドメイン。 PHP_INI_ALL
session.cookie_secure セキュアな接続 (HTTPS) のみクッキーを送信するか。
常時 HTTPS であれば 1 のほうがよいです。(そうでない場合は 0)
PHP_INI_ALL
session.cookie_httponly HTTP(S) 経由でのみ Cookie にアクセスできるようにするか。
基本的に 1 (有効) でよいです
PHP_INI_ALL
session.gc_maxlifetime セッションファイルが保存場所 (session.save_path) から消去されるまでの秒数。 PHP_INI_ALL

セッションの有効期限を伸ばしたい時は、特に下記の変更をすると良いです。

  • session.save_path を変更
  • session.cookie_lifetimesession.gc_maxlifetime を同じ時間にする

session.cookie_lifetime のみ変更すると、下記のような問題が起こることがあります。

  • レンタルサーバーなどの共有スペースだと保存場所が他のサーバーユーザーと被っていることが多く、session.save_path を変更していないと他のサーバーユーザーの設定の影響でセッションファイルが意図せず消されてしまう
  • session.gc_maxlifetimesession.cookie_lifetime 以上の秒数にしていないと Cookie は残っていてもサーバー上のセッションファイルが先に消されてしまう