VMWare 6.5+;PHP 5.3.3+;Symfony 1.4

VMWare 6.5+;PHP 5.3.3+;Symfony 1.4,php,symfony1,doctrine,vmware-workstation,Php,Symfony1,Doctrine,Vmware Workstation,在学习“实用符号”课程时,我遇到了一个奇怪的错误 我在VMWare 6.5.5机器上安装了Debian Squence。它附带PHP5.3.3,我使用的是Symfony1.4。源文件位于主机上,我正在使用共享文件夹功能(vmhgfs装载)访问它们 现在,当我尝试以下命令时,我得到一个错误: php symfony doctrine:build --model php symfony doctrine:build --sql 错误: PHP Parse error: syntax er

在学习“实用符号”课程时,我遇到了一个奇怪的错误

我在VMWare 6.5.5机器上安装了Debian Squence。它附带PHP5.3.3,我使用的是Symfony1.4。源文件位于主机上,我正在使用共享文件夹功能(vmhgfs装载)访问它们

现在,当我尝试以下命令时,我得到一个错误:

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分区上),它可以工作, -将虚拟机转换为VirtualBox,并在共享文件夹上执行相同的操作, -将PHP降级到5.2.6(从lenny),它就可以工作了

我记得不久前Smarty生成的PHP代码也出现了类似的问题。因为它是由PHP自动生成的,可以随意重新生成,所以我让它在本地目录中生成。但我认为这不适用于条令生成的文件

有没有人知道发生了什么事以及我如何修复它

编辑:以下是第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:为了明确起见,我测试了以下组合,以缩小问题范围:

find . -exec touch {} \;
  • 虚拟机软件:VMWare工作站 6.5.5/VirtualBox 4.0.8
  • PHP版本:5.3.3/5.2.6
  • 装载类型:vmhgfs(或带VirtualBox的vboxsf)/ext4(本地) /cifs(又名Windows共享)

在任何情况下,我都使用相同的源文件(但对于ext4,因为除了复制它们,我别无选择)。我在组合粗体项目时失败。如果我改变其中任何一个,一切都会好起来。我还尝试使用开放虚拟机模块来代替提供的vmware工具,并从头开始构建Debian安装,而不是使用我自己的自动脚本,但两者都没有改变任何事情。

好吧,这可能不是主题,但我希望它能有所帮助:
我正在写同一本书,我已经做到了(我想你最好像我一样做):

  • 已在VirtualBox中安装Ubuntu服务器
  • 在Ubuntu上安装LAMP服务器
  • 已安装vsftpd,用于Ubuntu上的ftp访问
  • 在Ubuntu上安装了SSH服务器
现在,如果我在Linux主机上,我使用具有ftp访问权限的Aptana Studio编辑文件,使用SSH运行命令,如果我在Windows上,我使用Aptana Studio和Putty进行SSH访问

如果你做类似的事情,你可能不会有麻烦。
希望有帮助。

这似乎是vmhgfs中的一个bug-我在使用Drupal PHP代码时也遇到了同样的问题。似乎只有当文件从来宾添加到主机时才会发生这种情况,例如使用git在Linux VM中克隆存储库

有三种变通方法:

  • 将文件复制到所需位置,然后在虚拟机的VMWare设置中禁用共享文件夹,刷新网页以获得“未找到”,然后重新启用共享文件夹

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

    find . -exec touch {} \;
    
  • 从主机打开受影响的文件,对其进行修改,然后将其重新保存。如果您在Windows计算机上,这可能很有用


  • 错误的范围从PHP解析错误到其他错误,通常会标记文件的最后一行。

    我在OpenSUSE 11.4和使用vmhgfs(在Mac上)的PHP5.3.5上也有同样的问题。我也在使用条令,但是我在没有完整的symfony项目的情况下使用它

    最初vmhgfs根本不起作用,所以我下载了OpenVM工具并编译/安装了它。这解决了我几个星期的问题,但今天又回来了

    问题似乎是php读取超过了文件的结尾。如果我用cat、less或tail读取文件,那么文件的结尾看起来很好

    但是如果我做
    php-s bad_file.php>bad_file.php.html
    并查看html输出,我可以在文件的末尾看到一些额外的垃圾,而cat、less或vim没有看到这些垃圾

    您可以看到php在文件末尾看到“array”(),而其他工具没有看到


    我发现的唯一解决方案是在每个有问题的文件末尾手动添加一个新的空行。出于某种原因,它只影响大约40个文件中的1-2个。

    这里也有同样的问题。我确认这是一个vmhgfs问题。 解决方法是使用NFS共享而不是vmware共享文件夹:

    Linux环境 OSX环境
    啊!我终于明白了。我正在Mac OS X Lion(10.7.2)上使用VMware Fusion(4.0.2),我一直在竭尽全力想弄明白这一点

    升级您的VMware工具


    到目前为止,还不错:没有再次遇到问题。目前最新的版本是VMware Tools 8.0.0。

    我在Wordpress和Laravel方面也遇到了这个问题。要解决这个问题,我必须从来宾服务器重新装载装载的文件夹

    例如,我的所有源文件都位于主机(OSX)上,并通过vmhgfs共享给Ubuntu(来宾)。装载点是/mnt/hgfs/www。要重新装载:

    sudo mount /mnt/hgfs/www
    

    你能在第144行显示BaseJobeetJob.class.php周围的代码吗?可能条令:任务没有正常工作。实际上,“php5-l/var/www/appli/lib/model/doctor/base/BaseJobeetJob.class.php”告诉我“没有检测到语法错误”。此外,如果我试图用php5.2.6从另一个虚拟机构建SQL(来自使用5.3.3创建的模型),一切都很好。嗯。我想你这里有一个真正的WTF。我为你感到抱歉。你的主机操作系统是什么?是Windows吗?在旁注中,我最终切换到了没有这个问题的VirtualBox。但是,Apache有时无法正确发送已修改的文件。我发现我可以通过禁用文件内存映射来修复它(启用映射)
    sudo mount /mnt/hgfs/www