一、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
还是不好
完毕!
111