Fatal error: Uncaught –> Smarty: undefined extension class ‘Smarty_Internal_Method_Register_Function’

明けましておめでとうございます。今年もよろしくお願いいたします。

さて、新年早々、上記のエラーで環境構築できなくて、2時間ほどはまった(´;ω;`)

どっちかというと社内向けメモですがご容赦ください。

多分、こんなことではまる人も少ないとは思うんだけど、書いておきます。

環境は、WindowsにXAMPP for Windows 7.2.26 です。

PHPはPHP Version 7.2.26。

PHPのテンプレートエンジン、Smartyを呼び出すところは下記の通り。


<?php
/**
 * Class Template
 * テンプレートエンジン管理
 * @since 2018/12/06
 */
class Template {
	
    private static $smarty = null;
    
    /**
	 *  Smarty取得
	 *  @param string $template_dir templateディレクトリ
	 *  @param string $compile_dir compileディレクトリ
     *
     *  @return object Smarty  
	 */
    public static function getSmarty(
        $template_dir = TEMPLATE_DIR,
        $compile_dir = TEMPLATE_COMPILE
    ) {
        if(self::$smarty !== null) {
            return self::$smarty;
        }

        self::$smarty = new Smarty();
        self::$smarty->template_dir = $template_dir;
        self::$smarty->compile_dir = $compile_dir;

        self::$smarty->register_function('autoversion', 'Template::autoVersion');
        
        return self::$smarty;
    }

    /**
	 *  ファイル名にバージョン管理用タイムスタンプ追加
	 *  @param array $params 
     *      $params['file'] アプリのルートディレクトリからのファイル相対パス
	 *  @param object Smarty
     * 
     *  @return string クエリーストリングにタイムスタンプを追加したファイル名  
	 */
    public static function autoVersion($params, &$smarty)
    {
        $file = $params['file'];
        $path = SERVER_PATH . $file;
        if(!file_exists($path)) {
            return $file;
        }

        $mtime = filemtime($path);
        return $file . '?' . $mtime;
    }

    
}

Smartyを取得するところ。

$smarty = Template::getSmarty();

そしたら

Fatal error: Uncaught –> Smarty: undefined extension class ‘Smarty_Internal_Method_Register_Function’

で止まってしまうんですよねー。

ググっても、下記のページしか出てこず。

https://www.smarty.net/forums/viewtopic.php?p=94694&sid=369b32fbbe502599af4fa43ef106a2c2

Smartyは3.1.34(これを執筆当時の最新版)で最新版なのになー。

Smartyの設定が悪いのかな?

と思って試行錯誤すること数時間。

詰まって上記のSmarty呼び出し部分を書いた人に聞いたら、これ、Smarty2系でしか動作しない書き方らしい…。

なので、Smarty2.6.31をダウンロードし、インストールしたら動作するようになりました。

Smartyのダウンロードサイトはこちら。

https://www.smarty.net/download

人に聞くって大事だね(´ω`)

カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です