Странные PHP разбора / синтаксические ошибки с VMWare 6.5 + PHP 5.3.3 + Symfony 1.4 - PullRequest
8 голосов
/ 17 июня 2011

Выполняя курс «Практическое Symfony», я столкнулся со странной ошибкой.

Я установил Debian Squeeze на машину VMWare 6.5.5.Он поставляется с PHP 5.3.3, и я использую Symfony 1.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), это работает.

Я помню, что некоторое время назад у меня была такая же проблема с кодом PHP, сгенерированным Smarty.Поскольку он был автоматически сгенерирован 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 Workstation 6.5.5 / VirtualBox 4.0.8
  • Версия PHP: 5.3.3 / 5.2.6,
  • Тип монтирования: vmhgfs (или vboxsf с VirtualBox) / ext4 (локальный) / cifs (он же общий ресурс Windows).

В каждом случае я используюте же самые исходные файлы (но для ext4, потому что у меня не было другого выбора, кроме как копировать их).У меня сбой при объединении жирных элементов.Если я изменю любой из них, все идет хорошо.Я также пытался использовать open-vm-modules вместо предоставленных инструментов vmware и создавать установку Debian с нуля вместо того, чтобы использовать собственный автоматический скрипт, но ни один из них ничего не изменил.

Ответы [ 6 ]

8 голосов
/ 28 июня 2011

Это похоже на ошибку в vmhgfs - у меня та же проблема, связанная с PHP-кодом Drupal.Похоже, это также происходит, когда файлы добавляются на хост из гостя, например, с помощью git для клонирования репозитория в виртуальной машине Linux.

Существует три обходных пути:

  1. Скопируйте файлы в нужное место, затем отключите общие папки в настройках VMWare для виртуальной машины, обновите веб-страницу, чтобы получить сообщение «Не найдено», затем снова включите общие папки.

  2. На хост-компьютере выполните следующую команду, которая обновляет доступ к файлу / измененные временные метки для каждого файла, в результате чего драйвер VMWare перезагружает файл, устраняя проблему:

    find . -exec touch {} \;
    
  3. Откройте затронутый файл с хост-компьютера, измените его и сохраните обратно.Это может быть полезно, если вы работаете на компьютере с Windows.

Ошибки варьируются от ошибок синтаксического анализа PHP до других, обычно помечая последнюю строку файла.

3 голосов
/ 06 июля 2011

У меня та же проблема на OpenSUSE 11.4 с PHP 5.3.5 с использованием vmhgfs (на Mac). Я также использую доктрину, однако я использую ее без полного проекта Symfony.

Изначально vmhgfs вообще не работал, поэтому я скачал open-vm-tools и скомпилировал / установил это. Это решило мою проблему на несколько недель, но вернулось сегодня.

Похоже, что проблема с чтением php за концом файла. Если я читаю файл с помощью cat, less или tail, то конец файла выглядит нормально.

tail of bad file

Но если я сделаю php -s bad_file.php > bad_file.php.html и посмотрю на вывод html, то в конце файла я вижу, что есть какой-то дополнительный мусор, которого я не вижу с cat, less или vim.

php syntax highlighting of bad file

Вы можете видеть, что php видит "array (" в конце файла, в то время как другие инструменты этого не видят.

Единственное решение, которое я нашел, - это вручную добавить новую пустую строку в конце каждого проблемного файла. По какой-то причине это влияет только на 1-2 файла из 40.

1 голос
/ 20 октября 2011

Тьфу! Наконец я понял это. Я использую VMware Fusion (4.0.2) на Mac OS X Lion (10.7.2), и я пытаюсь понять это.

Обновите свои VMware Tools!

Пока все хорошо: не сталкивался с проблемой снова. Последним выпуском на данный момент является VMware Tools 8.0.0.

1 голос
/ 04 октября 2011

Та же проблема здесь. Я подтверждаю, что это проблема vmhgfs. Обходной путь - использовать общий ресурс NFS вместо общих папок vmware:

Linux env

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 env

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/
0 голосов
/ 29 мая 2013

Я также испытываю эту проблему в отношении Wordpress и Laravel.Чтобы решить эту проблему, я должен перемонтировать подключенную папку из гостевой системы.

Например, все мои исходные файлы расположены на хосте (OSX) и доступны для Ubuntu (гостя) с помощью vmhgfs.Точка монтирования - / mnt / hgfs / www.Чтобы перемонтировать:

sudo mount /mnt/hgfs/www
0 голосов
/ 18 июня 2011

Ну, это может быть не по теме, но я надеюсь, что это поможет:
Я работаю над той же книгой, и я сделал это (думаю, вам лучше сделать что-то вроде меня):

  • Установленный сервер Ubuntu внутри VirtualBox
  • Установленный сервер LAMP в Ubuntu
  • Установлен vsftpd, для доступа по ftp в Ubuntu
  • Установленный SSH-сервер в Ubuntu.

Теперь, если я на хосте Linux, я использую Aptana Studio с доступом по ftp для редактирования файлов и SSH для запуска команд, а если я в Windows, я использую Aptana Studio и Putty для доступа по SSH.

Если вы сделаете что-то подобное, у вас, вероятно, не будет проблем. Надеюсь, это поможет.

...