PHPのコードを別環境で動かそうとした時に、次のエラーが発生してしばらく悩みました。
PHP Fatal error: Call to undefined function XXXXX() in YYYYY.php
関数 XXXXX()は、YYYYY.php の先頭で require_once ‘ZZZZ.php’ したファイル内で定義しています。
試しに require_once ‘ZZZZ.php’ の代わりに存在しないファイル ZZZZ_test.php にしたら、次のようにエラーになるので、ZZZZ.php は読み込まれているようです。
PHP Fatal error: require_once(): Failed opening required 'ZZZZ_test.php'
関数定義したファイルは読み込まれているのに、エラーで関数が定義されていないと言われます。
謎でした。
これ、原因は次の2つによるものでした。
- php.ini の short_open_tag オプションが Off(デフォルト)
- phpファイルが
short_open_tag オプションが On だと、phpファイルが だけで始まってもOKになります。
ただ、short_open_tag がデフォルトの Off の時でも、ファイルが だけで始まっても、PHPは require での読み込み時にエラーにしないようです。
元々PHPのコードが動いていた環境では、short_open_tag オプションが On になっていたので、問題無く動作していたようです。
ということで、対応は次のいずれかになります。
- phpファイルの始まりを
- php.ini の short_open_tag オプションを On にする
PHP で Call to undefined function エラーがどうしても取れない場合は、確認してみて下さい。
コメント