在多个应用程序之间共享TinyMCE插件
Sharing TinyMCE plugin across multiple applications
我使用的是CakePHP 2.4.7和来自cakeedc的TinyMCE插件。
我在服务器上的共享位置设置了我的CakePHP核心和插件,以便多个应用程序可以访问它。这使我不必更新多个拷贝的TinyMCE。在我迁移到新服务器和更新软件之前,一切都运行得很好。
新服务器运行Apache 2.4而不是2.2,使用mod_ruid2而不是suexec。
我现在得到这个错误时,试图加载编辑器:
Fatal Error (4): syntax Error, unexpected T_CONSTANT_ENCAPSED_STRING in [/xyz/Plugin/TinyMCE/webroot/js/tiny_mce/tiny_mce.js, line 1]
我应该如何开始调试这个?
解决方案尝试我尝试从应用程序的webroot添加一个符号链接到TinyMCE的插件webroot。这个工作是因为它加载了js文件和编辑器,但是TinyMCE插件在错误的当前目录上工作,并且文件管理不会分开。
问题是AssetDispatcher
过滤器,它包括使用PHPs include()
语句的css
和js
文件,导致文件通过PHP解析器发送,在那里它会绊倒在TinyMCE脚本中出现的<?
。
一个非常烦人的,而且,如果你问我的话,因为它是未记录的和非可选的,危险的行为。
自定义资产调度程序
如果你想继续使用插件资产分派器,扩展内置的一个,并重新实现AssetDispatcher::_deliverAsset()
方法,删除包含功能。当然,从维护角度来看,这有点烦人,但这是一个相当快速的解决方案。
类似:
// app/Routing/Filter/MyAssetDispatcher.php
App::uses('AssetDispatcher', 'Routing/Filter');
class MyAssetDispatcher extends AssetDispatcher {
protected function _deliverAsset(CakeResponse $response, $assetFile, $ext) {
// see the source of your CakePHP core for the
// actual code that you'd need to reimpelment
ob_start();
$compressionEnabled = Configure::read('Asset.compress') && $response->compress();
if ($response->type($ext) == $ext) {
$contentType = 'application/octet-stream';
$agent = env('HTTP_USER_AGENT');
if (preg_match('%Opera(/| )([0-9].[0-9]{1,2})%', $agent) || preg_match('/MSIE ([0-9].[0-9]{1,2})/', $agent)) {
$contentType = 'application/octetstream';
}
$response->type($contentType);
}
if (!$compressionEnabled) {
$response->header('Content-Length', filesize($assetFile));
}
$response->cache(filemtime($assetFile));
$response->send();
ob_clean();
// instead of the possible `include()` in the original
// methods source, use `readfile()` only
readfile($assetFile);
if ($compressionEnabled) {
ob_end_flush();
}
}
}
// app/Config/bootstrap.php
Configure::write('Dispatcher.filters', array(
'MyAssetDispatcher', // instead of AssetDispatcher
// ...
));
参见http://book.cakephp.org/2.0/en/development/dispatch-filters.html
不要只禁用短打开标签
我在这里只是猜测,但它在其他服务器上工作的原因可能是短开放标记(即<?
)被禁用。然而,即使这是你的新服务器上的问题,这不是你应该依赖的东西,资产仍然使用include()
服务,你很可能不想检查所有第三方CSS/JS在每次更新时可能的PHP代码注入。
- WebDriverException:tinyMCE未在selenium Web driver java中定义
- Facebook共享显示一个接一个的空白页面
- 在Angular Fullstack中设置TinyMCE
- 通过javascript/html访问twitter共享iframe
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 在我的SPA应用程序中集成Facebook共享的问题
- 在索引.html和应用.js [node.js] 之间共享变量
- AngularJS:$q.dedefe()不能由工厂方法共享
- 如何允许在TinyMCE中使用valid_elements进行注释标记
- 合并TinyMCE(jQuery插件)文件
- 使用闭包共享构造函数参数
- Facebook共享动态参数链接
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- TinyMCE从MSWord粘贴的文本在所有文本下加下划线
- 如何在没有插件和Wordpress的情况下创建共享社交媒体
- TinyMCE实例在切换角度路由选项时会消失
- 在requirejs中共享实例化对象
- 在Javascript服务器/客户端中共享对象定义
- 使用服务(AngularJS)在控制器之间共享数据
- 在多个应用程序之间共享TinyMCE插件