2016-05-24 12 views
0

Ich habe eine bestehende, gut funktionierende PHP-Anwendung. Ich untersuche ein Server-Upgrade, das den Wechsel von PHP5 zu PHP7 beinhaltet. Soweit ich das aus der Dokumentation ersehen kann, sollte Smarty3 mit PHP7 kompatibel sein. Beim Testen stellt sich jedoch heraus, dass Smarty nach dem Upgrade die Vorlagen nicht kompiliert.Smarty3 Upgrade auf PHP7 und seltsame Probleme mit Register-Plugin

Die Quelle des Problems scheint diese Linie zu sein:

$this->smarty->registerPlugin('compiler', 'asset_url', array(&$this, 'asset_url')); 

, die die PHP-Anwendung verursacht, wie dies zum Absturz:

Notice: Array to string conversion in /usr/share/php/smarty3/sysplugins/smarty_internal_templatecompilerbase.php on line 415 

Notice: Undefined property: template::$Array in /usr/share/php/smarty3/sysplugins/smarty_internal_templatecompilerbase.php on line 415 

Fatal error: Uncaught Error: Function name must be a string in /usr/share/php/smarty3/sysplugins/smarty_internal_templatecompilerbase.php:415 
Stack trace: 
#0 /usr/share/php/smarty3/sysplugins/smarty_internal_templateparser.php(3585): Smarty_Internal_TemplateCompilerBase->compileTag('asset_url', Array) 
#1 /usr/share/php/smarty3/sysplugins/smarty_internal_templateparser.php(4413): Smarty_Internal_Templateparser->yy_r32() 
#2 /usr/share/php/smarty3/sysplugins/smarty_internal_templateparser.php(4515): Smarty_Internal_Templateparser->yy_reduce(32) 
#3 /usr/share/php/smarty3/sysplugins/smarty_internal_smartytemplatecompiler.php(118): Smarty_Internal_Templateparser->doParse(3, '}') 
#4 /usr/share/php/smarty3/sysplugins/smarty_internal_templatecompilerbase.php(283): Smarty_Internal_SmartyTemplateCompiler->doCompile('<!DOCTYPE html>...') 
#5 /usr/share/php/smarty3/sysplugins/smarty_internal_template.php(197): Smarty_Internal_TemplateCompilerBase->compileTemplate(Object(Smarty_Internal_Template)) 
#6 /usr/share/php/smarty3/sysplugins/sm in /usr/share/php/smarty3/sysplugins/smarty_internal_templatecompilerbase.php on line 415 

Die verdächtige Linie 415 sieht wie folgt aus:

$function = $this->smarty->registered_plugins[$plugin_type][$tag][0]; 
if (!is_array($function)) { 
    return $function($new_args, $this); 
} elseif (is_object($function[0])) { 
    return $this->smarty->registered_plugins[$plugin_type][$tag][0][0]->$function[1]($new_args, $this); <- Crash here! 
} else { 
    return call_user_func_array($function, array($new_args, $this)); 
} 

Ich nehme an, das ist ein grundlegender Unterschied zwischen PHP5 und PHP7, die mich beißt, aber ich kann nicht herausfinden, was es ist. Könnte mir jemand ein paar Hinweise geben, wie ich das klären kann?

+1

Kennen Sie genaue Version von Smarty, die Sie verwenden? Es gab einige Korrekturen für PHP 7 in der Version 3.1.28. – iainn

+0

Ich benutze 3.1.21-1ubuntu1. Das ist eine Untersuchung wert! – pehrs

+0

@iainn Scheint wie das war das Problem! Könnten Sie mir eine Antwort geben? – pehrs

Antwort