2012-12-31 26 views
0

可能重复:
Reference - What does this symbol mean in PHP?什么是这个PHP模板<=的含义

我试着有些失败运行为PHP-Nemid测试脚本。我试图通过代码工作,但当它到达使用文件“nemid.tpl.php”的渲染函数时,它变得有点失落。当我运行脚本时,模板文件被逐字写入屏幕,而不是PHP填充相关的模板变量,而只是写入文字PHP代码。换句话说<?= $some_var_value就像在渲染页面的源代码中一样。

我不明白的另一件事是模板文件中<?=的含义是什么。这不是我熟悉的PHP构造。起初我以为我应该将<?= $some_var更改为<? print $some_var,但在这种情况下,它仍然会将文字PHP代码打印到页面上。

如果有人能够为我提供一些有关这里发生的事情的信息,我将不胜感激。

模板文件(nemid.tpl.php)

<html> 
<body> 
     <form id="signedForm" name="signedForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>"> 
       <div id="applet"> 
<!-- div ID used for overlay/modal-box --> 
        <applet name="DANID_DIGITAL_SIGNATUR" tabindex="1" archive="<?= $ServerUrlPrefix ?>/bootapplet/1234567" code="dk.pbs.applet.bootstrap.BootApplet" width="200" height="250" mayscript="mayscript" style="visibility: visible; "> 
         <param name="ServerUrlPrefix" value="<?= $ServerUrlPrefix ?>"> 
         <param name="ZIP_BASE_URL" value="<?= $ZIP_BASE_URL ?>"> 
         <param name="ZIP_FILE_ALIAS" value="<?= $ZIP_FILE_ALIAS ?>"> 
         <param name="log_level" value="<?= $log_level ?>"> 
         <param name="paramcert" value="<?= $paramcert ?>"> 
         <param name="signproperties" value="<?= $signproperties ?>"> 
         <param name="paramsdigest" value="<?= $paramsdigest ?>"> 
         <param name="signeddigest" value="<?= $signeddigest ?>"> 
         <param name="MAYSCRIPT" value="<?= $MAYSCRIPT ?>"> 
        </applet> 
       </div> 
      <input type="hidden" name="signature"> 
      <input type="hidden" name="result"> 
     </form> 
<script type="text/javascript"> 
    function onLogonOk(signature) { 
     document.signedForm.signature.value=signature; 
     document.signedForm.result.value='ok'; 
     document.signedForm.submit(); 
    } 
    function onLogonCancel() { 
     document.signedForm.result.value='cancel'; 
     document.signedForm.submit(); 
    } 
    function onLogonError(emsg) { 
     document.signedForm.result.value=emsg; 
     document.signedForm.submit(); 
    } 
</script> 
</body> 
</html> 

渲染功能

我已经测试的$内容瓦尔在下面的功能,可以确认所需的提取变量由模板存在。

function render($template, $vars = array()) 
{ 
    extract($vars); 
    ob_start(); 
    include('../templates/' . $template . '.tpl.php'); 
    $content = ob_get_contents(); 
    ob_end_clean(); 
    return $content; 
} 

回答

4

<?=是回声的短打开标记。

<?='Hello world'?> 

将输出Hello world

并回答为什么它不解析,有什么名?你有没有安装PHP并配置好你的Apache/Nginx /其他服务器?

另外一点需要注意的是,你有模板利用PHP_SELF

PHP_SELF实际上开辟了许多漏洞,不建议使用。您可以使用替代:

basename(__FILE__); 
+0

请注意,由于某些服务器关闭了选项,因此一般情况下不宜使用它。 – Sir

+1

在所有5.4版本的安装中都很完美,它们始终在新版本中启用。 –

+1

我经常看到人们说它皱起眉头,从来不知道为什么。 – Sir

0
<?= 

,因为它们使用的HTML大部分被用作速记,大量的模板制造商文件,并根据需要在PHP中打印变量。

我的服务器已打开,但它可以关闭或不使用旧版本。

+0

不赞成使用short-tatgs'<?'。因为PHP 5.4'<?='是_always_可用的,不管ini设置为 –

+0

是真的,但我们不知道它们运行的​​PHP版本是什么。 – donlaur