【PHP】「Call to undefined function finfo_open()」と「Class ‘FInfo’ not found」

公開日:
更新日:
カテゴリー: PHP

画像ファイルの種類(拡張子やMIMEタイプ)を取得する方法にあるように、画像ファイルからMIMEタイプを取得できます。

そのとき、はまったことがあったのでメモ。

MIMEタイプの取得

画像ファイルのMIMEタイプを取得する際、次のようなプログラムを作成しました。

<?php
$img_file = "画像ファイルまでのパス(URL不可)";
$finfo    = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $img_file);
finfo_close($finfo);
//出力
echo $mimeType;
?>

もしくは

<?php
$img_file = "画像ファイルのパスやURL";
//画像ファイルのデータを取得
$img_data = file_get_contents($img_file);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_buffer($finfo, $img_data);
finfo_close($finfo);
//出力
echo $mimeType;
?>

エラー(Fatal error)が出た

しかし、これでは動作せず、以下のようなFatal erorが出ました。

Fatal error: Call to undefined function finfo_open()

Fatal error: Class ‘FInfo’ not found

つまり、finfo_openなんていう関数は定義されていないよ!と怒られているわけですが、この原因が分かりませんでした。

いろいろ調べていく中で、「php_fileinfo.dll」が無効になっているのが原因かも知れないというヒントがあり、php.iniに以下の記述を行いました。

extension=php_fileinfo.dll

しかしエラーは消えず。

ここで完全にお手上げだったのですが、「finfo_open」のマニュアルを読んでいたら、「PHP5.3.0から」という表記が。

そこで私のPHPのバージョンを確認したらバッチシ

PHP 5.2.17

でした。そりゃ動かなくて当然です。ということで、PHPのバージョンを

PHP 5.4.22

にしたらところ、問題なく動きました。

まとめ

完全なる凡ミスですが、私の中に「PHPのバージョンは万全だ」という根拠のない考えがあって初歩的なことに気づきませんでした。

人間(特に私)の思い込みって恐ろしいです。

 

あわせて読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント