为什么在我的Cake插件中将JavaScript文件解析为PHP?

men*_*sch 3 javascript php plugins parsing cakephp

我正在开发一个Cake插件中包含的一个JavaScripts,我遇到了问题.由于某种原因,JavaScript文件被解析为PHP文件,因此加载文件会引发此错误,这是一个PHP解析错误:

<b>Parse error</b>:  syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
Run Code Online (Sandbox Code Playgroud)

使用HtmlHelper调用脚本:

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

该错误由tiny_mce.js驻留在脚本目录的子目录中的压缩文件触发,未压缩版本显示相同的行为.问题是我在本地设置上没有遇到问题.

远程服务器运行PHP 5.2.17并mod_rewrite启用,我的Cake版本是1.3.10 - 我的测试设置运行PHP 5.3.4和相同版本的Cake.它可能是重写或权限错误,但我的应用程序运行正常,其他脚本(包括子目录和远程的脚本)加载没有问题.

编辑: 将tiny_mce目录移出Cake安装并链接到它后,JavaScript被正确解析.我猜这是一个与mod_rewrite和插件处理有关的错误,但我没有找到与此行为相关的其他情况.

Jon*_*rns 5

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

这是由于CakePHP调度程序处理插件的webroot中的文件的方式.它选择对包含CSS或JS扩展的文件执行PHP包含,并且只是发生tiny_mce.js文件包含字符<?,这意味着它不是仅输出JavaScript文本而是尝试将后续行解析为PHP代码.不出所料,它失败了!

这已经成为Lighthouse(CakePHP的bug跟踪系统)上的一个bug.建议的修复方法是:

  1. 创建从插件webroot到app webroot的符号链接(例如app/webroot/tinymce => app/Plugin/TinyMCE/webroot)
  2. 关闭PHP INI中的PHP短标签 - 无论如何都是一个很好的原则

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