事象
PHPで日本語対応のスクリプトを開発していると、以下のようなエラーが出ることがあります:
Fatal error: Uncaught Error: Call to undefined function mb_internal_encoding() in ...
このエラー、実は php.ini が読み込まれていない ことが原因です。特に VS Code の PHP Server 拡張機能を使ってローカル開発 している場合に頻繁に発生します。
本記事では、このエラーの原因と、3つの解決方法をご紹介します。
エラーの原因:Built-in HTTP Server と php.ini の関係
何が起きているのか?
Configuration File (php.ini) Path: no value
Loaded Configuration File: (none)
このメッセージが phpinfo() に表示されている場合、PHP が php.ini を読み込んでいません。
なぜ起きるのか?
VS Code の PHP Server 拡張機能は、PHP の Built-in HTTP Server を使用しています。
Server API: Built-in HTTP server
この Built-in server は、起動時に明示的に php.ini を指定しなければ、自動的には php.ini を読み込まないという特性があります。一方、Apache や Nginx は php.ini を自動で探して読み込むため、この問題が発生しません。
mbstring 拡張機能とは?
mbstring(Multibyte String)は、日本語などのマルチバイト文字を扱うための PHP 拡張機能です。以下のような関数が含まれています:
mb_internal_encoding()– 文字エンコーディングの設定mb_strlen()– マルチバイト文字列の長さを取得mb_substr()– マルチバイト文字列の一部を抽出
php.ini が読み込まれないと、この拡張機能が有効にならず、エラーが発生します。
解決方法1:コマンドラインで php.ini を明示的に指定(推奨)
手順
ステップ1:php.ini ファイルを準備する
- PHP がインストールされているディレクトリ(通常
C:\php)を開きます php.ini-developmentまたはphp.ini-productionをphp.iniにリネームします- 開発環境の場合:
php.ini-developmentを使用 - 本番環境の場合:
php.ini-productionを使用
- 開発環境の場合:
ステップ2:php.ini で mbstring を有効にする
テキストエディタで php.ini を開き、以下の行を探します:
;extension=mbstring
行頭の ;(セミコロン)を削除してコメント解除します:
extension=mbstring
保存します。
ステップ3:ターミナルで php.ini を指定して Built-in server を起動
VS Code のターミナルで、以下のコマンドを実行します:
cd C:\Users\kojin\OneDrive\lab\dev
php -c "C:\php\php.ini" -S localhost:8000
重要なオプション:
-c "C:\php\php.ini"→ php.ini ファイルのパスを明示的に指定-S localhost:8000→ localhost のポート 8000 で server を起動
ステップ4:確認
ブラウザで以下にアクセスし、phpinfo() を実行します:
http://localhost:8000/info.php
以下の項目が正しく表示されていることを確認します:
Loaded Configuration File: C:\php\php.ini
そして、configuration セクションに mbstring の項目が表示されていれば成功です。
解決方法2:VS Code の設定で自動化する
毎回コマンドを打つのが面倒な場合は、VS Code の設定ファイルで自動化できます。
ステップ1:VS Code の設定を開く
Ctrl + ,キーを押して、設定を開きます- 右上の「設定ファイルを開く」アイコンをクリックして、
settings.jsonを開きます
ステップ2:php.server.phpPath を設定
以下を settings.json に追加します(PHP Server 拡張機能の設定):
{
"php.server.phpPath": "C:\\php\\php.exe",
"php.server.phpConfigPath": "C:\\php\\php.ini",
"php.server.port": 8000
}
これで、PHP Server 拡張機能を起動する際に、自動的に php.ini が読み込まれるようになります。
解決方法3:code-runner で php.ini を指定
VS Code の「Code Runner」拡張機能を使用している場合は、以下の設定を追加します:
.vscode/settings.json を作成(またはプロジェクトフォルダの .vscode/settings.json):
{
"code-runner.executorMap": {
"php": "php -c \"C:\\php\\php.ini\""
}
}
phpinfo() で確認する方法
現在の PHP 設定を確認するには、以下のコードを実行します:
<?php
echo phpinfo();
?>
このファイルをブラウザで実行し、以下をチェックします:
| 項目 | 確認内容 |
|---|---|
| Configuration File (php.ini) Path | php.ini を探すパス |
| Loaded Configuration File | 実際に読み込まれた php.ini のパス |
| Scan this dir for additional .ini files | 追加の .ini ファイルを探すディレクトリ |
エラーが出ている場合:
Loaded Configuration File: (none)
解決後:
Loaded Configuration File: C:\php\php.ini
よくある質問(FAQ)
Q1. php.ini はどこに置くべき?
A: Windows の場合、以下のいずれかが標準的です:
C:\php\php.ini(PHP がインストールされているディレクトリ)C:\Windows\php.ini(Windows システムディレクトリ)
ただし、-c オプションで明示的に指定すれば、どこに置いても問題ありません。
Q2. php.ini-development と php.ini-production の違いは?
A: 主な違いは、エラーの表示設定です:
| 項目 | development | production |
|---|---|---|
display_errors | On(表示する) | Off(表示しない) |
log_errors | On(ログに記録) | On(ログに記録) |
| 用途 | ローカル開発環境 | 本番環境 |
ローカル開発を行っている場合は、php.ini-development を使用してください。
Q3. Apache や Nginx を使えば解決する?
A: はい。Apache や Nginx は php.ini を自動的に読み込むため、このエラーは発生しません。ただし、ローカル開発環境では Built-in server の方が軽量で、セットアップも簡単です。
Q4. 他の拡張機能(curl, gd など)でも同じエラーが出る?
A: はい。php.ini が読み込まれていないため、他の拡張機能も有効になりません。解決方法は同じです。
まとめ
| 方法 | 難易度 | 推奨度 | 備考 |
|---|---|---|---|
| コマンドラインで php.ini 指定 | ★☆☆ | ★★★ | 最も確実で汎用的 |
| VS Code 設定で自動化 | ★★☆ | ★★☆ | PHP Server 拡張が必要 |
| Code Runner 設定 | ★★☆ | ★★☆ | Code Runner 拡張が必要 |
最初は方法1(コマンドラインで php.ini 指定)から始めることをお勧めします。 一度動作確認できたら、方法2 や方法3 で自動化するのが良いでしょう。
参考資料
作成日 2026年1月25日


コメント