Почему файл JavaScript анализируется как PHP в моем плагине Cake? - PullRequest
3 голосов
/ 29 июня 2011

У меня проблема с одним из моих скриптов JavaScript, включенным в плагин Cake, который я разрабатываю. По какой-то причине файл JavaScript анализируется как файл PHP, поэтому при загрузке файла выдается эта ошибка, которая является ошибкой синтаксического анализа PHP:

<b>Parse error</b>:  syntax error, unexpected T_CONSTANT_ENCAPSED_STRING

Сценарий вызывается с помощью HtmlHelper:

<?php echo $this->Html->script(array(
  '/myplugin/scripts/tiny_mce/tiny_mce',
)); ?>

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

Удаленный сервер работает под управлением PHP 5.2.17 с включенной mod_rewrite, моя версия Cake - 1.3.10 - моя тестовая установка работает под управлением PHP 5.3.4 и той же версии Cake. Это может быть ошибка перезаписи или прав доступа, но в противном случае мое приложение работает нормально, и другие скрипты (в том числе в подкаталогах и удаленных) загружаются без проблем.

EDIT: После удаления каталога tiny_mce из установки Cake и связывания с ним JavaScript анализируется правильно. Я предполагаю, что это ошибка, связанная с mod_rewrite и обработкой плагинов, но я не нашел других случаев, связанных с этим поведением.

Ответы [ 2 ]

5 голосов
/ 27 февраля 2012

Я также сталкивался с этой проблемой, с точно таким же файлом: Tiny MCE JavaScript.

Это связано с тем, что диспетчер CakePHP обрабатывает файлы в webroot плагина. Он выбирает включение PHP для файлов с расширениями CSS или JS, и так получилось, что файл tiny_mce.js содержит символы <?, то есть вместо простого вывода текста JavaScript он пытается проанализировать последующие строки как PHP код. Неудивительно, что это терпит неудачу!

Это было поднято как ошибка на Lighthouse (система отслеживания ошибок CakePHP). Предлагаемые исправления:

  1. Создайте символическую ссылку из веб-корня плагина на веб-корень приложения (например, app/webroot/tinymce => app/Plugin/TinyMCE/webroot)
  2. Отключите короткие теги PHP в своем PHP INI - в любом случае, это хороший принцип

Короче говоря, CakePHP может не исправить это, поскольку они хотят поддерживать возможность включения кода PHP в файлы JS / CSS.

0 голосов
/ 07 июля 2011

Вам нужно поместить файл js в APP / plugins / your_plugin / webroot / js / и получить к ним доступ, например /your_plugin/js/file.js.Если вы этого не сделаете, диспетчер не сможет передать вам нужный файл и попытаться вместо этого загрузить контроллер.

...