【发布时间】:2011-09-17 01:34:17
【问题描述】:
在学习“Practical 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
错误:
PHP Parse error: syntax error, unexpected ')' in /var/www/appli/lib/model/doctrine/base/BaseJobeetJob.class.php on line 144
有趣的是,当我: - 在没有共享文件夹的情况下做同样的事情(例如在 ext3 分区上),它可以工作, - 将VM转换为VirtualBox并在共享文件夹上执行相同的操作,它可以工作, - 将 PHP 降级到 5.2.6(从 lenny),它可以工作。
我记得前段时间 Smarty 生成的 PHP 代码也遇到过同样的问题。由于它是自动生成的 PHP 并且可以随意重新生成,因此我在本地目录中生成了它。但我认为这不适用于 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.
其实就是文件的结尾……
编辑#2:为了清楚起见,我已经测试了以下组合以缩小问题范围:
- VM 软件:VMWare 工作站 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 安装,而不是使用我自己的自动化脚本,但都没有改变任何东西。
【问题讨论】:
-
您能否在第 144 行显示 BaseJobeetJob.class.php 周围的代码?也许学说:任务没有正常工作。
-
实际上,“php5 -l /var/www/appli/lib/model/doctrine/base/BaseJobeetJob.class.php”告诉我“未检测到语法错误”。此外,如果我尝试使用 PHP 5.2.6(从使用 5.3.3 创建的模型)从另一个虚拟机构建 SQL,一切都很好。
-
哼。我猜你这里有一个真正的WTF。我为你感到难过。
-
您的主机操作系统是什么?是 Windows 吗?
-
在旁注中,我终于切换到没有这个问题的 VirtualBox。但是,Apache 有时无法正确发送已修改的文件。我发现我可以通过禁用共享文件夹中文件的文件内存映射(EnableMMAP Off)和内核发送文件支持(EnableSendFile Off)来修复它。
标签: php symfony1 doctrine vmware-workstation