2012-09-03 32 views
7

我在当前的Symfony2项目有一个奇怪的PHP错误:奇怪的意外T_STRING错误

unexpected T_STRING in /blahblah/Foo/BarBundle/Entity/User.php on line 1 

这是一个非常标准的错误,通常与错配一双“或”

但在这里。是文件的代码user.php的

<?php 
namespace Foo\BarBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
* @ORM\Entity(repositoryClass="Foo\BarBundle\Entity\UserRepository") 
*/ 
class User extends \FOS\UserBundle\Entity\User 
{ 
    // classic user entity 

线<?PHP是线#1,没有引号,和奇怪的事情来自一个事实,这个错误才会出现我的临时服务器上:在具有本地代码副本的2台开发机器上,其行为如预期,没有错误或警告。 该文件是正确的,缓存被清空。我认为这可能是一个编码错误,但它似乎不是这个。我也想到命名空间的问题,但服务器上的PHP版本是正确的(5.3.16)

你知道这个错误可以产生什么,或者我可以搜索哪个方向?提前致谢。

+0

甚至有可能用'\\'命名类吗? –

+1

检查文件是否有BOM(字节顺序标记),如果有,则将文件转换为没有BOM的常规UTF-8 –

+0

@IvanHušnjak它不是BOM - 我们会看到'PHP致命错误:命名空间声明语句必须是在第二行的/blahblah/Foo/BarBundle/Entity/User.php脚本中的第一个语句,然后 – phihag

回答

0

我认为这是你文件的编码问题。例如,如果您的项目采用UTF8编码,请使用文本编辑器打开文件,然后选择“编码” - >“不带BOM”的UTF-8选项。

+0

谢谢,但这不是问题:文件已经以UTF8编码,没有BOM。 – ClemKeirua

+2

@Sybio你读过这个问题的评论吗?它已经被提及 – j0k

2

我与一起使用的大多数编码约定严格要求在脚本中使用LF('Unix样式','\x0A')行结束符。谁设法提交代码CRLF或上帝保佑,CR不得不忍受皇家份额的痛苦。 )

这似乎并不是什么大不了的事情,但它可以节省您搜索奇怪错误的时间 - 例如在这种情况下。

相关问题