Почему файл 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 и обработкой плагинов, но я не нашел других случаев, связанных с этим поведением.

Author: mensch, 2011-06-29

2 answers

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

Это связано с тем, как диспетчер CakePHP обрабатывает файлы в веб-корне плагина. Он выбирает включение 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.

 5
Author: Jon Cairns, 2012-02-27 13:24:42

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

 0
Author: burzum, 2011-07-07 09:56:57