我正在开发的 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.17mod_rewrite
启用后,我的 Cake 版本是 1.3.10 - 我的测试设置运行 PHP 5.3.4 和相同版本的 Cake。
这可能是重写或权限错误,但我的应用程序运行良好,否则其他脚本(包括子目录和远程脚本中的脚本)加载没有问题。
EDIT:将tiny_mce 目录移出Cake 安装并链接到该目录后,JavaScript 将被正确解析。我猜这是与 mod_rewrite 和插件处理相关的错误,但我还没有发现与此行为相关的其他案例。
我也遇到过这个问题,使用完全相同的文件:Tiny MCE JavaScript。
这是由于 CakePHP 调度程序处理插件 webroot 中的文件的方式造成的。它选择对具有 CSS 或 JS 扩展名的文件执行 PHP 包含,而tiny_mce.js 文件恰好包含以下字符<?
,这意味着它不只是输出 JavaScript 文本,而是尝试将后续行解析为 PHP 代码。没想到竟然失败了!
这已经是作为错误提出 http://cakephp.lighthouseapp.com/projects/42648/tickets/1853Lighthouse(CakePHP 的错误跟踪系统)。建议的修复方法是:
- 创建从插件 webroot 到应用程序 webroot 的符号链接(例如
app/webroot/tinymce => app/Plugin/TinyMCE/webroot
)
- 关闭 PHP INI 中的 PHP 短标签 - 无论如何,这是一个很好的原则
简而言之,CakePHP 可能无法解决此问题,因为他们希望保持对能够在 JS/CSS 文件中包含 PHP 代码的支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)