VMWare 6.5 + PHP 5.3.3 + Symfony 1.4中出现奇怪的PHP解析/语法错误

Adi*_*lle 8 php doctrine symfony1 vmware-workstation

在遵循"实践Symfony"课程的同时,我遇到了一个奇怪的错误.

我在VMWare 6.5.5机器上安装了Debian Squeeze.它附带PHP 5.3.3,我使用的是Symfony 1.4.源文件在主机上,我使用共享文件夹功能(vmhgfs mount)访问它们.

现在,当我尝试以下命令时,出现错误:

php symfony doctrine:build --model    
php symfony doctrine:build --sql
Run Code Online (Sandbox Code Playgroud)

错误:

PHP Parse error:  syntax error, unexpected ')' in /var/www/appli/lib/model/doctrine/base/BaseJobeetJob.class.php on line 144
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我: - 在没有共享文件夹的情况下做同样的事情(例如在ext3分区上),它可以工作, - 将VM转换为VirtualBox并在共享文件夹上执行相同的操作,它可以工作, - 降级PHP到5.2.6(来自lenny),它的工作原理.

我记得前一段时间与Smarty生成的PHP代码有同样的问题.因为它是自动生成的PHP并且可以随意重新生成,所以它是在本地direcorty中生成的.但我不认为这适用于Doctrine生成的文件.

有没有人知道发生了什么以及如何解决它?

编辑:这是第144行的代码:

    public function setUp()
    {
        parent::setUp();
        $this->hasOne('JobeetCategory', array(
             'local' => 'category_id',
             'foreign' => 'id',
             'onDelete' => 'CASCADE'));

        $timestampable0 = new Doctrine_Template_Timestampable();
        $this->actAs($timestampable0);
    }
} // Line 144 here.
Run Code Online (Sandbox Code Playgroud)

它实际上是文件的结尾......

编辑#2:说清楚我已经测试了以下组合以缩小问题范围:

  • VM软件:VMWare Workstation 6.5.5/VirtualBox 4.0.8
  • PHP版本:5.3.3/5.2.6,
  • 挂载类型:vmhgfs(或带有VirtualBox的vboxsf)/ ext4(本地)/ cifs(也称为Windows共享).

在每种情况下,我使用相同的源文件(但对于ext4,因为除了复制它们别无选择).组合粗体项时我失败了.如果我改变其中任何一个,一切都很顺利.我还尝试使用open-vm-modules代替提供的vmware工具,并从头开始构建Debian安装,而不是使用我自己的自动脚本,但都没有改变任何东西.

Mar*_*sen 8

这似乎是vmhgfs中的一个错误 - 我在使用Drupal PHP代码时遇到了同样的问题.它似乎也只发生在 guest虚拟机添加到主机的文件时,例如使用git克隆Linux VM中的存储库.

有三种解决方法:

  1. 将文件复制到所需位置,然后在虚拟机的VMWare设置中禁用共享文件夹,刷新网页以便"未找到",然后重新启用共享文件夹.

  2. 在主机上,运行以下命令,更新每个文件的文件访问/修改时间戳,从而导致VMWare驱动程序重新加载文件,修复问题:

    find . -exec touch {} \;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从主机打开受影响的文件,进行修改并保存.如果您使用的是Windows计算机,这可能很有用.

错误的范围从PHP Parse错误到其他错误,通常标记文件的最后一行.