ホーム › エラー解決 › PHP › Call to undefined function
PHP ERROR

PHP Call to undefined function の解決法

存在しない関数を呼び出したときの致命的エラーです。関数名の綴りや定義漏れが原因です。

このエラーメッセージ

Fatal error: Uncaught Error: Call to undefined function strlan()

原因

❌ エラーになるコード

NG
<?php
$s = "progo";
echo strlan($s);

✅ 修正したコード

OK
<?php
$s = "progo";
echo strlen($s);   // 5
▶ 修正済みコードを実行エディタで開く
progoのPHP実行環境(インストール不要・登録不要)でその場で動作を確認できます。

解決のポイント

エラーに出ている関数名を、正しい綴りに直します。組み込み関数は公式のスペルを確認しましょう。自作関数の場合は定義してから呼ぶか、関数定義がファイルに含まれているか確認します。

原因を4パターンで切り分ける

関数名で見当がつきます。

PHPバージョンで削除された関数

アップグレード後に急に出た場合はこれ。create_function()(8.0削除→無名関数へ)、each()(8.0削除→foreach)、split()(7.0削除→preg_split / explode)、mysql_*()(7.0削除→mysqli / PDO)。

呼ぶ前に存在チェック

<?php
if (function_exists('mb_strlen')) {
    echo mb_strlen('こんにちは');   // 5
} else {
    echo strlen('こんにちは');       // バイト数にフォールバック
}
▶ function_exists() のコードを実行エディタで開く
progoのPHP実行環境(インストール不要・登録不要)でその場で確認できます。

よくある質問

mb_系の関数がundefinedになる
mbstring拡張が必要です。学習用のブラウザ実行では一部使えない場合があります。
curl_init() が undefined
curl拡張が無効です。php.ini の extension=curl を有効化してWebサーバーを再起動します。php -m で読み込み済みか確認できます。
名前空間を使うファイルで組み込み関数が undefined
namespace 内では未修飾名が現在の名前空間で探されます。\strlen() のように先頭にバックスラッシュを付けてグローバル関数を明示します。
アップグレードしたら急に出た
create_function・each・split・mysql_* などは新しいPHPで削除されています。無名関数・foreach・preg_split・PDO へ置き換えます。
クラスのメソッドで出る
->methodName() の綴りや、そのクラスにメソッドが定義されているか確認します。