刀片PHP变量在本地Laravel项目中未定义但未生成?

时间:2017-03-15 23:02:27

标签: php laravel zend-framework blade

我的Laravel项目中有一个非常奇怪的错误。我的Blade视图文件中的某些代码在服务器上运行完美,但在本地项目VM上失败。

简单的代码是:

<?$class = 'abc';?>
<p><?=$class?></p> /* My local project fails here */

在我当地的Laravel项目中,我收到错误:

  

例外&#39; ErrorException&#39;带有消息&#39;未定义的变量:class

为何与众不同?我真的很想知道为什么这会在服务器上运行但在本地失败。

服务器设置:

  • CentOS 6.8 VPS
  • Laravel版本Laravel Framework version 5.2.45
  • PHP版本PHP 5.6.30 (cli) (built: Mar 11 2017 08:42:18)
  • Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

本地设置:

  • Windows 10
  • Homestead VM
  • Laravel版本Laravel Framework version 5.2.45
  • PHP版本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

3 个答案:

答案 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)

我遇到了同样的问题,最后我在工作半天后发现了这个问题。检查组件文件夹应该以大写开头!