VS Code + PHP Built-in Server で mb_internal_encoding() エラーが出た時の解決方法

WordPress / サイト育成

事象

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 ファイルを準備する

  1. PHP がインストールされているディレクトリ(通常 C:\php)を開きます
  2. php.ini-development または php.ini-productionphp.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 の設定を開く

  1. Ctrl + , キーを押して、設定を開きます
  2. 右上の「設定ファイルを開く」アイコンをクリックして、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) Pathphp.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: 主な違いは、エラーの表示設定です:

項目developmentproduction
display_errorsOn(表示する)Off(表示しない)
log_errorsOn(ログに記録)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日

 

 

コメント

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