8

在学习“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:为了清楚起见,我已经测试了以下组合以缩小问题范围:

  • 虚拟机软件: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 安装,而不是使用我自己的自动化脚本,但两者都没有改变任何东西。

4

6 回答 6

8

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

有三种解决方法:

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

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

    find . -exec touch {} \;
    
  3. 从主机打开受影响的文件,对其进行修改,然后将其保存回来。如果您使用的是 Windows 机器,这可能会很有用。

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

于 2011-06-28T10:48:05.687 回答
3

我在 OpenSUSE 11.4 和 PHP 5.3.5 上使用 vmhgfs(在 Mac 上)遇到了同样的问题。我也在使用学说,但是我在没有完整的 symfony 项目的情况下使用它。

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

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

坏文件的尾巴

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

错误文件的php语法高亮

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

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

于 2011-07-06T19:01:59.070 回答
1

啊! 最后我想通了。我在 Mac OS X Lion (10.7.2) 上使用 VMware Fusion (4.0.2),我一直在努力解决这个问题。

升级您的 VMware 工具!

到目前为止,一切顺利:没有再次遇到问题。目前的最新版本是 VMware Tools 8.0.0。

于 2011-10-19T23:00:45.020 回答
1

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

Linux环境

apt-get install portmap nfs-common nfs-kernel-server

mkdir /nfs-share1
echo "/nfs-share1 192.168.2.1(rw,sync)" >> /etc/exports

/etc/init.d/portmap start
/etc/init.d/nfs-kernel-server start
/etc/init.d/nfs-common start

usermod -u 501 paolo
find / -user paolo -exec chown paolo {} \;

OS X 环境

showmount -e 192.168.2.129

mkdir /Users/paolo/netshare1
mount -t nfs -o resvport,soft,intr,rsize=8192,wsize=8192,timeo=900,retrans=3,proto=tcp 192.168.2.129:/nfs-share1 /Users/paolo/netshare1/
于 2011-10-04T09:27:24.687 回答
0

关于 Wordpress 和 Laravel,我也遇到了这个问题。要解决此问题,我必须从来宾重新挂载已安装的文件夹。

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

sudo mount /mnt/hgfs/www
于 2013-05-29T13:18:53.127 回答
0

好吧,这可能是题外话,但我希望它有所帮助:
我正在写同一本书,我已经这样做了(我认为你最好做一些像我一样的事情):

  • 在 VirtualBox 中安装 Ubuntu 服务器
  • 在 Ubuntu 上安装 LAMP 服务器
  • 安装 vsftpd,用于 Ubuntu 上的 ftp 访问
  • 在 Ubuntu 上安装 SSH 服务器。

现在,如果我在 Linux 主机上,我使用具有 ftp 访问权限的 Aptana Studio 来编辑文件和 SSH 来运行命令,如果我在 Windows 上,我使用 Aptana Studio 和 Putty 来进行 SSH 访问。

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

于 2011-06-17T22:14:32.880 回答