CMS:开发日记(1.5) - zhonglong/TPV GitHub Wiki
七月十五日
整理CMS自定义的配置:
- define('CMS_MEDIUM', 'AOC CMS-Medium');
- define('CPU_CORES', '8');
- define('TOTAL_MEMORY', '16 GB');
- define('TOTAL_SPACE', '100 GB');
- define('OS', 'CentOS');
- define('IP', '47.96.83.150');
- define('CMS_TARGET', 'aliyun'); 服务器所在位置
三月二十日
新需求,获取PDF文档第一页缩略图,参考 http://phpstudy.php.cn/b.php/87267.html 这个链接,使用 imagemagick 来实现。 先安装 ghostscript 和 imagemagick:
https://ghostscript.com/download/gsdnld.html
http://www.imagemagick.org/script/download.php
再参考 https://blog.csdn.net/ljwaheng/article/details/80743701 这个链接,安装 imagick 扩展:
http://pecl.php.net/package/imagick
实测应该将 CORE_*.dll 拷贝到php目录下,而非System32目录。
特别要注意imagemagick版本必须与imagick扩展要求的一致,否则phpinfo中 ImageMagick supported formats 显示空,php代码无法读取任何图片。
三月十五日
Windows平台上也可以通过命令行创建计划任务来运行XTR,如下:
SCHTASKS /Create /SC MINUTE /MO 5 /TN CloudCMS /TR "'D:\phpStudy\PHPTutorial\php\php-5.6.27-nts\php.exe' -f 'E:\smart_cms\cms\delta\shared\cms\bin\xtr.php'"
高亮处请替换成php.exe和xtr.php的实际路径。
然后再打开计划任务,选中CloudCMS这个任务,右击属性,在弹出的对话框中选择“不管用户是否登录都要运行”,否则每次运行时都会闪一下命令提示符的窗口。 此处设置需要输入用户密码,命令行没有提供对应的开关。
三月十四日
https://www.ctolib.com/topics-118315.html 这个链接提到LibreOffice不支持并发转码,需要部署多台服务器或Docker容器来解决,无法满足CMS的使用场景。
目前的思路是参考CLEAR的做法,上传文档时不进行转码,而是用后台服务去转码。 后台服务采用Xibo原生的XTR,添加一个定时转码的任务。 XTR依赖操作系统,计划任务@Windows,或者corntab@Linux,需要先进行配置,见: https://xibo.org.uk/docs/setup/xtr-routine-tasks
转码中/转码完成的状态通过media表的valid字段区分,valid=1表示转码完成,valid=0表示未完成。
十二月二十六日
PDF文件页数,有两种计算方法:
- 查找“/Count ”,后面的数字就是页数,但有的文档可以找到多处,一般取最大的那个;
- 查找“/Type /Page\n”并计数,注意“/Type /Page”后面必须加换行,否则会把“/Type /Pages”也给算进来;
PDF可以直接用 Notepad++ 打开,我试了几个文件,这两种方法都是靠谱的。
十二月十八日
10.0.0.2服务器上按 https://github.com/mnvx/lowrapper 搭建转码测试环境,Ubuntu自带LibreOffice确认可用。 地址:http://10.0.0.2/lowrapper/examples/index.html
另外,确认此方案在Windows上也是可行的,需要先安装LibreOffice( https://zh-cn.libreoffice.org/download/libreoffice-still/ ), 用默认安装路径,C:\Program Files\LibreOffice, 区分Windows和Linux只需要在创建Converter类时指定不同参数:
$converter = (PHP_OS == 'WINNT') ? new Converter('"C:\\Program Files\\LibreOffice\\program\\soffice.exe"') : new Converter();