我们一直忙于将 TinyMCE 从 3.x 升级到 4.2.5,无法阻止默认ENTER
操作的发生。
我们的目标是在CTRL + enter
按下时提交表单,重要的是提交应该在将换行符添加到 TinyMCE 之前发生。该3.x
分支使我们能够将事件添加到队列的顶部:
// Important: inject new eventHandler via addToTop to prevent other events
tinymce.get('tinymce_instance').onKeyDown.addToTop(function(editor, event) {
if (event.ctrlKey && event.keyCode == 13) {
$("form").submit();
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,我们无法弄清楚如何再次将其添加到事件的顶部。
event.preventDefault()
并且event.stopPropagation()
没有预期的效果,因为输入已经存在。奇怪的是它确实适用于其他键,可以防止字母数字键。http://jsfiddle.net/zgdcg0cj/
可以使用以下代码段添加事件:
tinymce.get('tinymce_instance').on('keydown', function(event) {
if (event.ctrlKey && event.keyCode == 13) {
$("form").submit();
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
问题:当我们的事件处理程序被调用时,换行符会提前添加到 TinyMCE 内容中,因此存储了不需要的输入。如何将事件添加到4.x
分支的顶部,或防止换行发生?
我们已经使用了libreoffice --headless
一段时间,首先是通过 Debian,在过去的几个月里我们切换到了 CentOS。我们使用Symfony Process命令将 a 转换docx
为pdf
,简化的命令如下所示:
libreoffice --headless --convert-to pdf \
--outdir /home/conversionoutdir \
/home/conversionindir/4f00ac05aee274967b.docx
Run Code Online (Sandbox Code Playgroud)
执行上述命令的 Symfony 进程非常简单:
$process = new Process($cmd);
$process->mustRun();
Run Code Online (Sandbox Code Playgroud)
一切都工作正常,但几天后转换不再完成,该过程将一直等待,直到达到 60 秒超时。
一直在通过在我们的服务器上执行完全相同的转换来调试此问题DEV
,一切都很好。还尝试转换小文档和大文档,以查看页数对于达到超时的影响。还直接在命令行上执行命令,转换也可以,并在几秒钟内完成。
我们的应用程序捕获异常,并将其发送到记录器:
进程 \"/usr/bin/libreoffice --headless --nologo --nofirststartwizard --norestore --convert-to pdf:writer_web_pdf_Export --outdir /home/conversionoutdir /home/conversionindir/4f00ac05aee274967b.docx\" 超出超时60 秒。
看来 PHP 无法再跟踪进程了。这里可能发生了什么?关于如何进一步调试这个的任何线索?
编辑:在抽象出 Symfony 进程组件、将conversionoutdir
权限设置为 777 并执行以下代码片段后,如果从 PHP 执行,转换仍然会挂起:
$output = array();
exec('libreoffice --headless --convert-to pdf \
--outdir /home/conversionoutdir \
/home/conversionindir/4f00ac05aee274967b.docx', $output);
print_r($output);
Run Code Online (Sandbox Code Playgroud)