php.ini完全ガイド|設定ファイルの場所から編集方法まで徹底解説

PHP

PHPでWebアプリケーションを開発していると、「アップロードできるファイルサイズを増やしたい」「エラーメッセージを表示したい」「タイムゾーンを設定したい」といった場面に遭遇します。

これらの設定を管理しているのが「php.ini」というファイルです。

この記事では、php.iniの基礎知識から、ファイルの場所の見つけ方、重要な設定項目の解説、安全な編集方法まで、初心者の方にも分かりやすく徹底解説します。


スポンサーリンク
  1. php.iniとは?PHPの設定ファイルの基礎
    1. php.iniの定義
    2. なぜphp.iniが重要なのか?
    3. php.iniが読み込まれるタイミング
  2. php.iniの場所を見つける方法
    1. 方法1:phpinfo()で確認(最も確実)
    2. 方法2:コマンドラインで確認
    3. 方法3:一般的な場所を確認
    4. 複数のphp.iniが存在する理由
  3. php.iniの基本的な編集方法
    1. 編集前の準備
    2. テキストエディタでの編集
    3. 設定の書き方
    4. 設定変更後の反映
  4. 重要な設定項目の詳細解説
    1. ファイルアップロード関連
    2. メモリ関連
    3. 実行時間制限
    4. エラー表示関連
    5. タイムゾーン設定
    6. セッション関連
  5. 環境別の推奨設定
    1. 開発環境の推奨設定
    2. 本番環境の推奨設定
  6. .htaccessやini_set()での設定変更
    1. .htaccessでの設定変更
    2. ini_set()での設定変更
  7. トラブルシューティング
    1. 問題1:設定を変更したのに反映されない
    2. 問題2:ファイルサイズが大きくならない
    3. 問題3:構文エラーでPHPが動かない
    4. 問題4:権限エラーで編集できない
  8. よくある質問(FAQ)
    1. Q1. php.iniを編集しても変更が反映されません。なぜ?
    2. Q2. php.iniがどこにあるか分かりません。
    3. Q3. 共有レンタルサーバーでphp.iniを編集できますか?
    4. Q4. 開発環境と本番環境で設定を変える方法は?
    5. Q5. php.iniの変更はセキュリティリスクがありますか?
    6. Q6. upload_max_filesizeを大きくしたのに、アップロードできません。
  9. まとめ|php.iniを理解して快適なPHP開発を

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()で確認(最も確実)

手順

  1. phpinfo.phpファイルを作成

以下の内容で、Webサーバーのドキュメントルートにファイルを作成します。

<?php
phpinfo();
?>
  1. ブラウザでアクセス
http://localhost/phpinfo.php

または

http://あなたのドメイン/phpinfo.php
  1. 「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を使います。

主な動作モード

  1. Apache モジュール:Apache経由でWebサイトとして動作
  2. PHP-FPM:NginxなどのWebサーバーと連携
  3. 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_sizeupload_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_filesizepost_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つの原因があります。

  1. Webサーバーの再起動をしていない
  • Apache、PHP-FPM、Nginxを必ず再起動してください
  1. 別の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編集のチェックリスト

  1. バックアップを取る
  2. 正しいphp.iniを編集する(phpinfo()で確認)
  3. 設定を変更する
  4. 構文エラーがないか確認
  5. Webサーバーを再起動
  6. phpinfo()やテストで動作確認

最初は難しく感じるかもしれませんが、基本を押さえれば、php.iniは強力なカスタマイズツールになります。

この記事を参考に、あなたの開発環境を最適化してください。きっと、PHP開発がもっと快適になるはずです!

コメント

タイトルとURLをコピーしました