Почему файл JavaScript анализируется как PHP в моем плагине Cake?
У меня проблема с одним из моих JavaScripts, включенных в плагин 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.
Это может быть ошибка перезаписи или разрешений, но в противном случае мое приложение работает нормально, и другие сценарии (в том числе в подкаталогах и удаленных) загружаются без проблем.
РЕДАКТИРОВАТЬ: После перемещения каталога tiny_mce из установки Cake и ссылки на него JavaScript проанализирован правильно. Я предполагаю, что это ошибка, связанная с mod_rewrite и обработкой плагинов, но я не нашел других случаев, связанных с этим поведением.
2 answers
Я также сталкивался с этой проблемой с точно таким же файлом: Крошечный MCE JavaScript.
Это связано с тем, как диспетчер CakePHP обрабатывает файлы в веб-корне плагина. Он выбирает включение PHP в файлы с расширениями CSS или JS, и так уж получилось, что tiny_mce.js файл содержит символы <?
, что означает, что вместо простого вывода текста JavaScript он пытается проанализировать последующие строки как PHP-код. Неудивительно, что это не удается!
Это имеет был поднят как ошибка на Lighthouse (система отслеживания ошибок CakePHP). Предлагаемые исправления:
- Создайте символическую ссылку из веб-корня плагина на веб-корень приложения (например
app/webroot/tinymce => app/Plugin/TinyMCE/webroot
) - Отключите короткие теги PHP в вашем PHP INI - хороший принцип в любом случае
Короче говоря, CakePHP может не исправить это, так как они хотят поддерживать поддержку возможности включения PHP-кода в файлы JS/CSS.
Вам нужно поместить файл js в приложение/плагины/your_plugin/webroot/js/ и получить к ним доступ, как/your_plugin/js/file.js . Если вы этого не сделаете, диспетчер не сможет передать вам нужный файл и вместо этого попытается загрузить контроллер.