この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 07:10:02

タイトル: php.ini
SEOタイトル: PHP php.ini 設定完全ガイド (場所/memory_limit/upload/error_reporting)

この記事の要点
  • php.ini は PHP の挙動を制御する設定ファイル。場所は php --ini で確認
  • Server API ごとに別ファイル: cli/php.ini / apache2/php.ini / fpm/php.ini
  • 主要設定: memory_limit / max_execution_time / post_max_size / upload_max_filesize / error_reporting / display_errors / log_errors / timezone
  • .htaccessphp_valueini_set() でランタイム上書き可能
  • 現在の有効設定は phpinfo() で確認

php.ini の場所を特定する

# CLI から確認 (一番速い)
php --ini
# Configuration File (php.ini) Path: /etc/php/8.3/cli
# Loaded Configuration File:         /etc/php/8.3/cli/php.ini
# Scan for additional .ini files in: /etc/php/8.3/cli/conf.d
# Additional .ini files parsed:      /etc/php/8.3/cli/conf.d/10-opcache.ini ...

# phpinfo() でブラウザから (Apache / FPM)
echo '<?php phpinfo();' > /var/www/html/info.php
# → "Loaded Configuration File" を確認 (本番では削除)

# php_ini_loaded_file()
php -r "echo php_ini_loaded_file();"

# 適用済 conf.d (拡張別) 一覧
php -r "echo php_ini_scanned_files();" | tr ',' '\n'

Server API ごとに別ファイル

SAPI典型パス (Debian/Ubuntu)用途
CLI/etc/php/8.3/cli/php.iniphp script.php 実行時
Apache mod_php/etc/php/8.3/apache2/php.iniApache + mod_php
PHP-FPM/etc/php/8.3/fpm/php.iniNginx + PHP-FPM
RHEL系/etc/php.ini 単一CentOS / Rocky 等
macOS Homebrew/opt/homebrew/etc/php/8.3/php.inibrew install php
WindowsC:\php\php.ini通常 PHP インストールフォルダ

注意: Web (Apache/FPM) と CLI で別ファイルなので、php script.php で動いた設定が Web では効かないことがあります。

必ず押さえる主要設定

; === メモリ・実行時間 ===
memory_limit = 256M           ; 1 スクリプトあたりの上限
max_execution_time = 30       ; CLI は 0 (無制限)
max_input_time = 60           ; リクエストパース時間

; === アップロード ===
file_uploads = On
upload_max_filesize = 20M
post_max_size = 25M           ; ★ upload_max_filesize より大きく
max_file_uploads = 20

; === エラー表示 ===
error_reporting = E_ALL
display_errors = Off          ; ★ 本番は必ず Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/error.log

; === タイムゾーン ===
date.timezone = Asia/Tokyo

; === 文字 ===
default_charset = "UTF-8"

; === セッション ===
session.cookie_httponly = 1
session.cookie_secure = 1     ; HTTPS のみ
session.use_strict_mode = 1
session.gc_maxlifetime = 1440 ; 24分

; === OPcache (本番ほぼ必須) ===
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 1   ; 本番は 0 + デプロイで cache_invalidate

upload_max_filesize と post_max_size の関係

リクエスト全体サイズ ≤ post_max_size
個別ファイルサイズ  ≤ upload_max_filesize
合計ファイルサイズ  ≤ post_max_size

例: 20MB のファイルをアップロードしたい
  upload_max_filesize = 20M
  post_max_size       = 25M   ← upload より大きく (フォームデータ分余裕)
  memory_limit        = 256M  ← post の数倍が安全

CGI / FastCGI 経由ではさらに上流 (Nginx) の制限あり
  client_max_body_size 25M;   ← Nginx 側

error_reporting の組み合わせ

設定意味
E_ALL全てのエラー (推奨)
E_ALL & ~E_DEPRECATED非推奨警告を抑制
E_ALL & ~E_NOTICE軽微な通知を抑制
E_ERROR | E_WARNING | E_PARSE致命系のみ
0すべて非表示 (非推奨)

.htaccess での上書き (Apache)

# .htaccess (Apache + mod_php)
php_value memory_limit 512M
php_value max_execution_time 60
php_value upload_max_filesize 50M
php_value post_max_size 55M
php_flag display_errors off
php_flag log_errors on
php_value error_log /var/log/php/app-error.log

# php_value : 文字列 / 数値
# php_flag  : on/off

PHP-FPM (Nginx) では .htaccessphp_value は効きません。FPM プールの php_admin_value を使います:

; /etc/php/8.3/fpm/pool.d/www.conf
[www]
php_admin_value[memory_limit]        = 512M
php_admin_value[upload_max_filesize] = 50M
php_admin_value[post_max_size]       = 55M
php_admin_flag[display_errors]       = off
php_admin_flag[log_errors]           = on
php_admin_value[error_log]           = /var/log/php/app-error.log

ini_set() でランタイム変更

// スクリプト内で一時的に変更
ini_set('memory_limit', '512M');
ini_set('max_execution_time', 60);
set_time_limit(60);                          // max_execution_time のリセット

// 値の取得
$current = ini_get('memory_limit');          // '256M'

// 全設定取得
$all = ini_get_all();

// PHP_INI_SYSTEM (php.ini のみ変更可) は ini_set 不可
ini_set('disable_functions', '');            // ← 効かない

// よく使う一時設定
ini_set('display_errors', '1');              // デバッグ時
ini_set('log_errors', '1');
ini_set('error_log', __DIR__ . '/debug.log');

変更権限レベル

レベル変更可能な場所
PHP_INI_SYSTEMphp.ini のみ (例: disable_functions)
PHP_INI_PERDIRphp.ini / .htaccess / .user.ini
PHP_INI_USER上 + ini_set()
PHP_INI_ALLすべて

変更を反映する

# CLI: 即時反映 (次のコマンドから)

# Apache + mod_php
sudo systemctl restart apache2
# または graceful
sudo systemctl reload apache2

# PHP-FPM
sudo systemctl reload php8.3-fpm

# 確認
php -i | grep memory_limit
# memory_limit => 256M => 256M

本番でよくある設定パターン

; 本番推奨
display_errors          = Off
display_startup_errors  = Off
log_errors              = On
error_log               = /var/log/php/error.log
error_reporting         = E_ALL & ~E_DEPRECATED

; セキュリティ
expose_php              = Off    ; X-Powered-By 隠す
session.cookie_httponly = 1
session.cookie_secure   = 1
session.cookie_samesite = Lax
allow_url_fopen         = Off    ; 可能なら
allow_url_include       = Off    ; 必須

; パフォーマンス
opcache.enable                  = 1
opcache.memory_consumption      = 256
opcache.interned_strings_buffer = 16
opcache.validate_timestamps     = 0     ; デプロイ時に opcache_reset
realpath_cache_size             = 4096K
realpath_cache_ttl              = 600

FAQ

Q: php.ini 変更が反映されない
A: SAPI を間違えていないか確認。Apache/FPM は再起動が必要。php -i | grep "Loaded Configuration" で実際に読まれているファイルを確認。

Q: ホスティングサービスで php.ini を変更できない
A: .user.ini.htaccess で対応可能なものも。PHP_INI_PERDIR 以下のディレクティブのみ。

Q: docker の PHP イメージで設定を上書きするには?
A: /usr/local/etc/php/conf.d/zz-custom.iniCOPY するのが定石。php.ini-production をベースに変更点だけ上書き。