Linux系统实现在线预览office文件方法

首页 编程分享 PHP丨JAVA丨OTHER 正文

袅袅牧童 推荐 原创 编程分享 2019-10-04 10:01:54

简介 最近接触了在线预览office的功能实现,先将实现中遇到的坑及解决方法总结下来。


一、windows系统下,现在大多数个人设计实现方式都是调用php原有的COM类库,不得不说一坑接一坑,放弃。

二、linux系统,不得不说linux系统的优势这时候体现的十分明显,闲话少说直接上方法。


Id安装openoffice ,unoconv
yum install openoffice    //office 依赖
yum install unoconv       //热门转换工具

/** PHP方法如下 使用shell_exec 函数调用命令行*/
public function convert_pdf()
    {
        echo "start to find file ";
        $file = FCPATH.'upload/item/34.docx';  //目标文件
        $newa = substr($file,0,strrpos($file,'.')).'.pdf'; //转换的文件
        if(! is_file($newa)) {
            $a = time();
            shell_exec("sudo unoconv -f pdf ".$file); // 文件不存在则转换文件
            $b = time() - $a;
            $time = date('s',$b);              //记录转换时间
            echo 'finished change in ' .$time.' seconds';
        } else {
            echo 'have file';
        }
    }

*** *** 编辑于 2018年04月25日 15:54:00 *** ***


重点来了 ,坑1:

shell_exec 函数调用不到。

解决方法:

Id在命令行中直接输入

Idunoconv -f pdf a.docx
发现成功转换文件;
那么很有可能就是权限问题了。
查看个人http访问服务用户,大多数用户为apache 。也不乏网上说的www-data这样的,检测方法;就是去查linux日志文件,auth.log

Id find / -name auth.log 
可能为  /var/log/auth.log

再次进坑,文件找不到。
算你狠,检查 config文件
楼主是CentOS6.2 ,文件为 rsyslong.conf, 6以下为syslog.conf
打开一开,我的乖乖,权限文件为secure 文件;

Id vi  secure 

发现 apache用户 not in sudoers ;
好办了, 

Idvi /etc/sudoers

加入代码 
IdId Allows people in group wheel to run all commands
apache  ALL=(ALL)       ALL             //注意添加的位置

IdId Same thing without a password
apache          ALL=(ALL)       NOPASSWD: ALL                //注意添加的位置

reboot 

然后可以解释为什么楼主 shell_exec命令用的sudo命令,权限问题解决;


*** *** 编辑于 2018年04月25日 16:00:01 *** ***


再次入坑,中文乱码问题;

很简单,CentOS中没有安装中文字体;

解决方法很简单,拷贝系统中 C:\windows\fonts 文件给他就好

具体操作如下:


发现windows中fonts文件夹比较大,压缩一下,win.zip

cd  /home/temp
找到压缩的文件;

//解压  
unzip win.zip  
mv Fonts /usr/share/fonts/win  
  
cd win  
chmod  -Rf 755 Fonts   
  
//加载字体  
mkfontscale   //命令未找到 yum install mkfontscale      
fc-cache –fv     //命令找不到 yum install fc-cache -fv
mkfontdir  

reboot


再次转换尝试,问题解决;

*** *** 编辑于 2018年04月26日 13:52:06 *** ***


坑三,卡死问题:

不得不说一坑接一坑,总结一句话,没有必要别接触这种功能,坑真的多;

这次是偶尔转义时,会遇到卡死情况,什么问题呢,原因很多:

比如进程过多,进程残留问题,调用unoconv 就有问题了,很可能导致错误502

必须重启php-fpm才行,网上有许多优化的方法,说白了都是扯淡的。

目前比较好的解决办法就是脚本 

php-fpm reload

还是不好


*** *** 编辑于 2018年06月21日 10:14:40 *** ***
完毕!

*** *** 编辑于 2018年09月12日 17:48:41 *** ***
111

Tags:


本篇评论 —— 揽流光,涤眉霜,清露烈酒一口话苍茫。


    声明:参照站内规则,不文明言论将会删除,谢谢合作。


      最新评论




ABOUT ME

Blogger:袅袅牧童 | Arkin

Ido:PHP攻城狮

WeChat:nnmutong

Email:nnmutong@icloud.com

标签云