MeWrite Docs

Fatal error: Call to undefined function

存在しない関数を呼び出した場合に発生するエラー

概要

Fatal error: Call to undefined function は、PHPで存在しない関数を呼び出した場合に発生するエラーです。関数名のスペルミス、拡張機能の未インストール、ファイルの読み込み忘れなどが原因です。

エラーメッセージ

Fatal error: Uncaught Error: Call to undefined function json_decode() in /app/process.php:10
Fatal error: Uncaught Error: Call to undefined function imagecreatefrompng() in /app/image.php:5

原因

  1. 関数名のスペルミス: 綴りが間違っている
  2. PHP拡張機能の未インストール: 必要な拡張がインストールされていない
  3. ファイルの読み込み忘れ: 関数を定義したファイルが読み込まれていない
  4. 名前空間の問題: 名前空間付きの関数を正しく呼び出していない
  5. PHPバージョンの違い: 古いPHPバージョンで新しい関数を使用

解決策

1. スペルミスを修正

1
2
3
4
5
6
7
// ❌ スペルミス
$data = json_decod($json);
$length = strleen($string);

// ✅ 正しいスペル
$data = json_decode($json);
$length = strlen($string);

2. PHP拡張機能をインストール

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# インストール済みの拡張を確認
php -m

# 特定の拡張を確認
php -m | grep json
php -m | grep gd
php -m | grep curl

# Ubuntu/Debian でインストール
sudo apt-get install php-json
sudo apt-get install php-gd
sudo apt-get install php-curl
sudo apt-get install php-mbstring
sudo apt-get install php-xml
sudo apt-get install php-mysql

# CentOS/RHEL でインストール
sudo yum install php-json
sudo yum install php-gd

# macOS (Homebrew) でインストール
brew install php
# 拡張は通常含まれている

# php.ini で有効化
extension=gd
extension=curl
1
2
3
4
5
6
7
// よくある拡張機能と関数
// json 拡張: json_encode(), json_decode()
// gd 拡張: imagecreatefrompng(), imagejpeg()
// curl 拡張: curl_init(), curl_exec()
// mbstring 拡張: mb_strlen(), mb_convert_encoding()
// openssl 拡張: openssl_encrypt(), openssl_decrypt()
// zip 拡張: zip_open(), ZipArchive

3. ファイルを読み込む

1
2
3
4
5
6
7
8
9
// ❌ ファイルが読み込まれていない
myCustomFunction();

// ✅ 関数定義ファイルを読み込む
require_once 'functions.php';
myCustomFunction();

// ✅ オートローダーを使用(Composer)
require_once 'vendor/autoload.php';

4. 名前空間を正しく使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// functions.php
namespace App\Helpers;

function formatDate($date) {
    return $date->format('Y-m-d');
}

// 使用側
// ❌ 名前空間なしで呼び出し
formatDate($date);

// ✅ 完全修飾名で呼び出し
\App\Helpers\formatDate($date);

// ✅ use 文でインポート
use function App\Helpers\formatDate;
formatDate($date);

5. PHPバージョンを確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// PHPバージョンを確認
echo phpversion();

// 関数が存在するか確認
if (function_exists('str_contains')) {
    // PHP 8.0 以降
    if (str_contains($haystack, $needle)) {
        // ...
    }
} else {
    // PHP 7.x 以前
    if (strpos($haystack, $needle) !== false) {
        // ...
    }
}

// ポリフィルを使用
if (!function_exists('str_contains')) {
    function str_contains(string $haystack, string $needle): bool {
        return strpos($haystack, $needle) !== false;
    }
}

6. Composer パッケージの確認

1
2
3
4
5
6
7
8
# Composer の自動読み込みを確認
composer dump-autoload

# パッケージが正しくインストールされているか確認
composer show

# パッケージを再インストール
composer install

7. 条件付きで関数を使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// 拡張機能がない場合の代替処理
if (extension_loaded('gd')) {
    $image = imagecreatefrompng($file);
} else {
    throw new Exception('GD extension is not installed');
}

// または代替ライブラリを使用
if (extension_loaded('gd')) {
    // GD を使用
} elseif (extension_loaded('imagick')) {
    // ImageMagick を使用
} else {
    throw new Exception('No image processing extension available');
}

8. Docker での拡張機能インストール

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Dockerfile
FROM php:8.2-fpm

# 拡張機能をインストール
RUN docker-php-ext-install pdo pdo_mysql
RUN apt-get update && apt-get install -y libpng-dev && docker-php-ext-install gd
RUN apt-get update && apt-get install -y libcurl4-openssl-dev && docker-php-ext-install curl
RUN docker-php-ext-install mbstring

# pecl 拡張をインストール
RUN pecl install redis && docker-php-ext-enable redis

デバッグのコツ

関数の存在確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 関数が存在するか確認
if (function_exists('json_decode')) {
    echo "json_decode is available";
}

// 拡張機能が読み込まれているか確認
if (extension_loaded('json')) {
    echo "JSON extension is loaded";
}

// 利用可能な関数一覧
print_r(get_defined_functions());

phpinfo() で確認

1
2
3
4
5
// 全ての設定と拡張を表示
phpinfo();

// 特定の拡張の情報
phpinfo(INFO_MODULES);

コマンドラインで確認

1
2
3
4
5
6
7
8
# 特定の関数を検索
php -r "var_dump(function_exists('json_decode'));"

# 拡張機能の詳細
php -i | grep -i json

# 設定ファイルの場所
php --ini

PHP の他のエラー

最終更新: 2025-12-08