PHPでWebアプリケーションを開発していると、「アップロードできるファイルサイズを増やしたい」「エラーメッセージを表示したい」「タイムゾーンを設定したい」といった場面に遭遇します。
これらの設定を管理しているのが「php.ini」というファイルです。
この記事では、php.iniの基礎知識から、ファイルの場所の見つけ方、重要な設定項目の解説、安全な編集方法まで、初心者の方にも分かりやすく徹底解説します。
php.iniとは?PHPの設定ファイルの基礎
php.iniの定義
php.ini(ピーエイチピー・ドット・アイエヌアイ)
- PHPの動作を制御する設定ファイル
- PHPがどのように動くかを決める「マニュアル」のようなもの
- テキストファイルなので、テキストエディタで編集可能
役割
- メモリ使用量の制限
- ファイルアップロードのサイズ上限
- エラー表示の設定
- タイムゾーンの設定
- セキュリティ関連の設定
なぜphp.iniが重要なのか?
設定を変更しないと起きる問題
- 大きなファイルがアップロードできない
- エラーメッセージが表示されない(デバッグが困難)
- 処理が途中で止まる(タイムアウト)
- 日時がずれる(タイムゾーンの問題)
適切に設定すると
- 開発環境が快適になる
- 本番環境のパフォーマンスが向上
- セキュリティが強化される
- エラーの原因特定が簡単になる
php.iniが読み込まれるタイミング
PHPは、以下のタイミングでphp.iniを読み込みます。
Apacheの場合
- Apacheが起動したとき
- 設定変更後はApacheの再起動が必要
Nginx + PHP-FPMの場合
- PHP-FPMが起動したとき
- 設定変更後はPHP-FPMの再起動が必要
コマンドラインの場合
- PHPスクリプトを実行するたびに読み込む
- 再起動不要
php.iniの場所を見つける方法
php.iniファイルは、環境によって場所が異なります。
方法1:phpinfo()で確認(最も確実)
手順
- phpinfo.phpファイルを作成
以下の内容で、Webサーバーのドキュメントルートにファイルを作成します。
<?php
phpinfo();
?>
- ブラウザでアクセス
http://localhost/phpinfo.php
または
http://あなたのドメイン/phpinfo.php
- 「Loaded Configuration File」を探す
ページ上部の表に、以下のような項目があります。
Loaded Configuration File: /etc/php/8.1/apache2/php.ini
これが、現在使用されているphp.iniのパスです。
重要な注意
- 確認後は、セキュリティのためphpinfo.phpファイルを削除してください
- 本番環境では絶対に公開したままにしないこと
方法2:コマンドラインで確認
ターミナルやコマンドプロンプトから確認できます。
Linux / Macの場合
php --ini
出力例
Configuration File (php.ini) Path: /etc/php/8.1/cli
Loaded Configuration File: /etc/php/8.1/cli/php.ini
Scan for additional .ini files in: /etc/php/8.1/cli/conf.d
Additional .ini files parsed: /etc/php/8.1/cli/conf.d/10-opcache.ini,
/etc/php/8.1/cli/conf.d/20-mysqli.ini
Windowsの場合
コマンドプロンプトを開いて:
php --ini
方法3:一般的な場所を確認
環境ごとの典型的な場所です。
Linux(Ubuntu/Debian)
Apache使用時:
/etc/php/8.1/apache2/php.ini
/etc/php/8.0/apache2/php.ini
Nginx + PHP-FPM使用時:
/etc/php/8.1/fpm/php.ini
/etc/php/8.0/fpm/php.ini
CLI(コマンドライン):
/etc/php/8.1/cli/php.ini
Mac(Homebrewでインストール)
/opt/homebrew/etc/php/8.1/php.ini
/usr/local/etc/php/8.1/php.ini
Windows(XAMPP)
C:\xampp\php\php.ini
Windows(WAMP)
C:\wamp64\bin\php\php8.1.0\php.ini
Mac(MAMP)
/Applications/MAMP/bin/php/php8.1.0/conf/php.ini
複数のphp.iniが存在する理由
PHPの動作モードによって、異なるphp.iniを使います。
主な動作モード
- Apache モジュール:Apache経由でWebサイトとして動作
- PHP-FPM:NginxなどのWebサーバーと連携
- CLI(コマンドライン):ターミナルから直接実行
それぞれ独立した設定ファイルを持つため、複数のphp.iniが存在します。
注意点
- Webサイトの設定を変えたいなら、Apache または FPM用のphp.iniを編集
- コマンドライン実行の設定を変えたいなら、CLI用を編集
php.iniの基本的な編集方法
実際にphp.iniを編集する手順です。
編集前の準備
必ずやるべきこと
1. バックアップを取る
# Linux / Mac
sudo cp /etc/php/8.1/apache2/php.ini /etc/php/8.1/apache2/php.ini.backup
# または日付付きで
sudo cp /etc/php/8.1/apache2/php.ini /etc/php/8.1/apache2/php.ini.$(date +%Y%m%d)
Windows(コマンドプロンプト):
copy C:\xampp\php\php.ini C:\xampp\php\php.ini.backup
2. 現在の設定を確認
どの値を変更するか、事前にメモしておきます。
テキストエディタでの編集
Linux / Macの場合
管理者権限が必要です。
# nanoエディタで編集
sudo nano /etc/php/8.1/apache2/php.ini
# vimエディタで編集
sudo vim /etc/php/8.1/apache2/php.ini
# Visual Studio Codeで編集
sudo code /etc/php/8.1/apache2/php.ini
Windowsの場合
エクスプローラーでファイルを開き、右クリック→「管理者として実行」でメモ帳やテキストエディタを起動します。
設定の書き方
php.iniの基本的な文法です。
基本構文
; これはコメント(セミコロンで始まる行)
設定名 = 値
値の種類
On/Off
display_errors = On
display_errors = Off
数値
max_execution_time = 30
memory_limit = 128M
文字列
date.timezone = "Asia/Tokyo"
error_log = "/var/log/php_errors.log"
単位について
- K:キロバイト(1024バイト)
- M:メガバイト(1024KB)
- G:ギガバイト(1024MB)
例:
upload_max_filesize = 10M ; 10メガバイト
memory_limit = 256M ; 256メガバイト
post_max_size = 50M ; 50メガバイト
設定変更後の反映
編集後、必ずサーバーを再起動します。
Apacheの再起動
Ubuntu/Debian:
sudo systemctl restart apache2
CentOS/RHEL:
sudo systemctl restart httpd
Mac (Homebrew):
brew services restart httpd
XAMPP (Windows):
- XAMPPコントロールパネルで「Apache」の「Stop」→「Start」
PHP-FPMの再起動
sudo systemctl restart php8.1-fpm
nginx使用時
PHP-FPMを再起動した後、nginxもリロードします。
sudo systemctl reload nginx
重要な設定項目の詳細解説
実務でよく変更する設定項目を解説します。
ファイルアップロード関連
upload_max_filesize
1つのファイルの最大アップロードサイズです。
upload_max_filesize = 10M
デフォルト値: 2M
変更が必要な場面
- 画像や動画のアップロード
- WordPressのテーマやプラグインのインストール
- 大きなファイルを扱うWebアプリケーション
post_max_size
POSTリクエスト全体の最大サイズです。
post_max_size = 20M
デフォルト値: 8M
重要なポイント
post_max_size
はupload_max_filesize
より大きくする必要があります- 複数ファイルを同時アップロードする場合は、その合計サイズを考慮
推奨設定例
upload_max_filesize = 10M
post_max_size = 20M
メモリ関連
memory_limit
1つのスクリプトが使用できる最大メモリです。
memory_limit = 128M
デフォルト値: 128M
変更が必要な場面
- 大量のデータを処理するスクリプト
- 画像処理(リサイズ、変換)
- データベースからの大量データ取得
注意点
- 大きすぎるとサーバーのメモリを圧迫
- 小さすぎるとスクリプトがエラーになる
環境別の推奨値
- 開発環境:256M〜512M
- 小規模本番環境:128M〜256M
- 大規模本番環境:512M〜1G(要チューニング)
実行時間制限
max_execution_time
スクリプトの最大実行時間(秒単位)です。
max_execution_time = 30
デフォルト値: 30秒
変更が必要な場面
- データのインポート/エクスポート
- バッチ処理
- 外部APIへの問い合わせ
- メール送信処理
注意点
- 0に設定すると無制限になる(推奨しません)
- 長すぎるとサーバーのリソースを占有
max_input_time
入力データ受信の最大時間です。
max_input_time = 60
デフォルト値: 60秒
大きなファイルをアップロードする場合は、この値も増やす必要があります。
エラー表示関連
display_errors
PHPエラーをブラウザに表示するかどうか。
; 開発環境
display_errors = On
; 本番環境
display_errors = Off
デフォルト値: Off(本番では必須)
セキュリティ上の注意
- 本番環境では必ずOffにする
- エラー情報から、サーバー構成が漏洩する危険
error_reporting
どのレベルのエラーを報告するか。
; すべてのエラーを報告
error_reporting = E_ALL
; 非推奨警告以外を報告
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
開発環境の推奨設定
display_errors = On
error_reporting = E_ALL
本番環境の推奨設定
display_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
log_errors = On
error_log = /var/log/php_errors.log
log_errors
エラーをログファイルに記録するかどうか。
log_errors = On
error_log = /var/log/php_errors.log
本番環境では必ず有効にしましょう。
タイムゾーン設定
date.timezone
日付・時刻関数で使用するタイムゾーンです。
date.timezone = "Asia/Tokyo"
デフォルト値: 未設定(警告が出る)
主要なタイムゾーン
- 日本:
Asia/Tokyo
- アメリカ東部:
America/New_York
- イギリス:
Europe/London
- 協定世界時:
UTC
設定しないとどうなる?
Warning: date(): It is not safe to rely on the system's timezone settings...
このような警告が表示され、日時が正しく表示されません。
セッション関連
session.save_path
セッションデータの保存場所です。
session.save_path = "/var/lib/php/sessions"
session.gc_maxlifetime
セッションデータの有効期間(秒単位)です。
session.gc_maxlifetime = 1440
デフォルト値: 1440秒(24分)
ログイン状態を長く保ちたい場合は、この値を増やします。
; 1週間(604800秒)
session.gc_maxlifetime = 604800
環境別の推奨設定
開発環境と本番環境では、異なる設定が推奨されます。
開発環境の推奨設定
; エラー表示(デバッグ用)
display_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_errors.log
; メモリと実行時間(余裕を持たせる)
memory_limit = 256M
max_execution_time = 60
max_input_time = 120
; ファイルアップロード(大きめに設定)
upload_max_filesize = 50M
post_max_size = 100M
; タイムゾーン
date.timezone = "Asia/Tokyo"
; その他
output_buffering = 4096
本番環境の推奨設定
; エラー表示(セキュリティ重視)
display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
log_errors = On
error_log = /var/log/php_errors.log
; メモリと実行時間(適切に制限)
memory_limit = 128M
max_execution_time = 30
max_input_time = 60
; ファイルアップロード(必要最小限)
upload_max_filesize = 10M
post_max_size = 20M
; タイムゾーン
date.timezone = "Asia/Tokyo"
; セキュリティ
expose_php = Off
allow_url_fopen = Off
allow_url_include = Off
; その他
output_buffering = 4096
zlib.output_compression = On
.htaccessやini_set()での設定変更
php.iniを直接編集できない場合の代替方法です。
.htaccessでの設定変更
Apacheを使用している場合、.htaccessファイルで設定を上書きできます。
.htaccessの例
# PHPの設定変更
php_value upload_max_filesize 20M
php_value post_max_size 40M
php_value memory_limit 256M
php_value max_execution_time 60
php_flag display_errors On
注意点
- すべての項目が.htaccessで変更できるわけではない
- サーバーの設定で.htaccessが無効になっている場合もある
- NginxやPHP-FPMでは使えない
ini_set()での設定変更
PHPスクリプト内で、実行時に設定を変更できます。
PHPコードの例
<?php
// メモリ制限を256MBに変更
ini_set('memory_limit', '256M');
// 実行時間を60秒に変更
ini_set('max_execution_time', 60);
// エラー表示を有効化
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);
// タイムゾーンを設定
ini_set('date.timezone', 'Asia/Tokyo');
// あなたのコード
?>
制限事項
- 一部の設定は変更できない(upload_max_filesizeなど)
- スクリプトごとに設定が必要
- サーバー全体の設定には影響しない
トラブルシューティング
php.ini編集でよくある問題と解決法です。
問題1:設定を変更したのに反映されない
原因
- Webサーバーを再起動していない
- 違うphp.iniを編集している
- キャッシュが残っている
解決法
1. 正しいphp.iniを編集しているか確認
<?php phpinfo(); ?>
「Loaded Configuration File」の項目を確認します。
2. Webサーバーを再起動
sudo systemctl restart apache2
# または
sudo systemctl restart php8.1-fpm
3. OPcacheをクリア
OPcacheが有効な場合、キャッシュをクリアします。
<?php
opcache_reset();
echo "OPcache cleared";
?>
問題2:ファイルサイズが大きくならない
原因
upload_max_filesize
とpost_max_size
の両方を変更していないmemory_limit
が小さすぎる- Webサーバー側の制限(Nginxなど)
解決法
1. 3つの値を確認
; これらの関係: post_max_size > upload_max_filesize
; memory_limit は post_max_size より大きく
upload_max_filesize = 50M
post_max_size = 100M
memory_limit = 256M
2. Nginx使用時は、nginx.confも確認
client_max_body_size 100M;
問題3:構文エラーでPHPが動かない
症状
- Webサイトが真っ白
- 500 Internal Server Error
原因
- php.iniの構文ミス
- セミコロンの付け忘れ
- 不正な値の設定
解決法
1. 構文チェック
php -c /etc/php/8.1/apache2/php.ini -r "echo 'OK';"
エラーが出たら、その行を修正します。
2. バックアップから復元
sudo cp /etc/php/8.1/apache2/php.ini.backup /etc/php/8.1/apache2/php.ini
sudo systemctl restart apache2
問題4:権限エラーで編集できない
症状
Permission denied
解決法
管理者権限で編集します。
sudo nano /etc/php/8.1/apache2/php.ini
よくある質問(FAQ)
Q1. php.iniを編集しても変更が反映されません。なぜ?
A. 主に2つの原因があります。
- Webサーバーの再起動をしていない
- Apache、PHP-FPM、Nginxを必ず再起動してください
- 別のphp.iniを編集している
- phpinfo()で実際に使われているファイルを確認してください
Q2. php.iniがどこにあるか分かりません。
A. phpinfo()で確認するのが最も確実です。
以下の内容でphpinfo.phpを作成し、ブラウザでアクセスしてください。
<?php phpinfo(); ?>
「Loaded Configuration File」の項目に表示されます。
Q3. 共有レンタルサーバーでphp.iniを編集できますか?
A. サーバーによって異なります。
- 編集可能な場合:管理画面でphp.iniのカスタム版を作成できる
- 編集不可の場合:.htaccessやini_set()で代替
レンタルサーバーのマニュアルを確認してください。
Q4. 開発環境と本番環境で設定を変える方法は?
A. 環境変数や条件分岐を使います。
方法1:環境ごとに別のphp.iniを使う
- 開発:
php.ini.development
- 本番:
php.ini.production
方法2:スクリプト内で環境判定
<?php
if ($_SERVER['HTTP_HOST'] === 'localhost') {
// 開発環境
ini_set('display_errors', 1);
} else {
// 本番環境
ini_set('display_errors', 0);
}
?>
Q5. php.iniの変更はセキュリティリスクがありますか?
A. 不適切な設定はリスクになります。
危険な設定例
; 危険!本番環境では絶対にしない
display_errors = On
expose_php = On
allow_url_fopen = On
allow_url_include = On
本番環境では、必ずセキュリティを重視した設定にしてください。
Q6. upload_max_filesizeを大きくしたのに、アップロードできません。
A. post_max_sizeとmemory_limitも確認してください。
以下の関係が必要です:
memory_limit > post_max_size > upload_max_filesize
また、Nginxを使用している場合は、nginx.confのclient_max_body_size
も確認してください。
まとめ|php.iniを理解して快適なPHP開発を
php.iniは、PHPアプリケーションの動作を左右する重要な設定ファイルです。
この記事の重要ポイント
- php.iniはPHPの設定を管理するファイル
- phpinfo()で現在使用中のphp.iniの場所を確認できる
- 編集後は必ずWebサーバーを再起動する
- バックアップは必ず取る
- 開発環境と本番環境で設定を変える
- 本番環境ではdisplay_errors = Offが必須
- ファイルアップロード設定は3つの項目を一緒に変更
php.ini編集のチェックリスト
- バックアップを取る
- 正しいphp.iniを編集する(phpinfo()で確認)
- 設定を変更する
- 構文エラーがないか確認
- Webサーバーを再起動
- phpinfo()やテストで動作確認
最初は難しく感じるかもしれませんが、基本を押さえれば、php.iniは強力なカスタマイズツールになります。
この記事を参考に、あなたの開発環境を最適化してください。きっと、PHP開発がもっと快適になるはずです!
コメント