我的Laravel项目中有一个非常奇怪的错误。我的Blade视图文件中的某些代码在服务器上运行完美,但在本地项目VM上失败。
简单的代码是:
<?$class = 'abc';?>
<p><?=$class?></p> /* My local project fails here */
在我当地的Laravel项目中,我收到错误:
例外&#39; ErrorException&#39;带有消息&#39;未定义的变量:class
为何与众不同?我真的很想知道为什么这会在服务器上运行但在本地失败。
服务器设置:
Laravel Framework version 5.2.45
PHP 5.6.30 (cli) (built: Mar 11 2017 08:42:18)
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
本地设置:
Laravel Framework version 5.2.45
PHP 5.6.15-1+deb.sury.org~trusty+1 (cli)
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans
with blackfire v1.6.0, https://blackfire.io, by Blackfireio Inc.
编辑:史蒂夫的建议之后。如果我将代码更改为下面的代码就可以了。怎么回事?
<?php $class = 'abc';?>
<p><?=$class?></p
答案 0 :(得分:2)
要将我的评论扩展为答案,<?$class = 'abc';?>
可能是问题,<?
是一个短开标记,默认情况下不启用(不要与<?=
混淆是一个短的echo标签,默认情况下启用。)
如果是这种情况,那么你应该用:
编辑你的php.ini short_open_tag = On
以匹配您的实时环境,或在整个项目中替换<?
的所有实例(包括尾随空格,以便您在<?=
找不到完全有效的<?php
)。
一般来说,短打开标签会被禁用,因为它们会导致读取xml的问题,所以我个人会选择第二个选项。
无论哪种方式都是一致的。
答案 1 :(得分:1)
您可以在本地环境中使用短标记<?
。检查本地short_open_tag
文件中的php.ini
值。
从文档:PHP还允许短开标记
http://php.net/manual/en/language.basic-syntax.phptags.php
或者只是使用
<?php $class = 'abc'; ?>
而不是
<?$ $class = 'abc'; ?>
答案 2 :(得分:0)
我遇到了同样的问题,最后我在工作半天后发现了这个问题。检查组件文件夹应该以大写开头!