【问题标题】:Why is the JavaScript file parsed as PHP in my Cake plugin?为什么我的 Cake 插件中的 JavaScript 文件被解析为 PHP?
【发布时间】:2011-06-29 09:04:34
【问题描述】:

我正在开发的 Cake 插件中包含的一个 JavaScript 有问题。由于某种原因,一个 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 和插件处理有关的错误,但我还没有找到与此行为相关的其他案例。

【问题讨论】:

  • 您的生产服务器能否设置.js 文件以供PHP 解释器编译?这是我能想到的唯一原因。
  • 我会尝试将&lt;script type="text/javascript" src="/path/to/tiny_mce.js"&gt; 直接写入视图以测试服务器是否处理它。如果是,那么问题应该出在 cakephp 上。

标签: php javascript parsing cakephp plugins


【解决方案1】:

我也遇到过这个问题,文件完全相同:Tiny MCE JavaScript。

这是由于 CakePHP 调度程序在插件的 webroot 中处理文件的方式。它选择对具有 CSS 或 JS 扩展名的文件进行 PHP 包含,而 tiny_mce.js 文件恰好包含字符 &lt;?,这意味着它不只是输出 JavaScript 文本,而是尝试将后续行解析为 PHP代码。不出所料,它失败了!

这是 Lighthouse(CakePHP 的错误跟踪系统)上的 raised as a bug。建议的修复方法是:

  1. 创建从插件 webroot 到应用 webroot 的符号链接(例如 app/webroot/tinymce =&gt; app/Plugin/TinyMCE/webroot
  2. 在你的 PHP INI 中关闭 PHP 短标签 - 一个很好的原则

简而言之,CakePHP 可能无法解决这个问题,因为他们希望保持对能够在 JS/CSS 文件中包含 PHP 代码的支持。

【讨论】:

  • 感谢您的所有研究!短标签在我的本地服务器上被禁用,但不幸的是很多主机选择启用该功能。按照错误报告中的建议,我已恢复将tiny_mce.js 存储在app webroot 中的做法。
  • 没问题。我认为这就是“解决方案”的问题——你不能总是控制你要部署到的服务器上的 PHP 配置。 CakePHP 说他们将来可能会改变这一点,所以祈祷吧!
  • PHP interpretation of plugin/theme assets has been removed。但是,它不在当前版本的 CakePHP (2.3) 中,我不知道为什么(提交是 6 个月前,但 2.3 是大约 1 个月前发布的)。
【解决方案2】:

你需要把js文件放到APP/plugins/your_plugin/webroot/js/中,像/your_plugin/js/file.js一样访问。如果您不这样做,调度程序将无法向您传递正确的文件并尝试加载控制器。

【讨论】:

  • 将脚本放在另一个目录而不是默认的 js 中对 Cake 来说不是问题。此外,附加 .js 扩展名并不是绝对必要的,HtmlHelper 会为您执行此操作。 Cake 的调度程序可能确实会尝试将 JavaScript 作为控制器加载,但不幸的是,当我将其引用为 /myplugin/js/myplugin/scripts/ 时,它并没有什么不同。
猜你喜欢
  • 2011-07-11
  • 2017-09-06
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多