PDF预览之word、excel、ppt转换为pdf,PHP内通过exec()调用笔记.txt

来源:互联网 发布:php网站开发 编辑:程序博客网 时间:2024/05/21 11:30
通过之前的总结,命令行上进行 word转换pdf没有问题,今天整合到php项目中,出现了一些问题,做个总结:1.在php中需要调用系统命令,先查看手册,查找系统函数:http://php.net/manual/zh/book.exec.php可知,支持的函数有:exec()passthru()system()shell_exec() == 执行运算符(``),例如:$output = shell_exec('ls -l');$output = echo `ls -l`;2.在php中需要调用系统命令,出于安全因素,一般禁用,我们需要开启php --ini // 查看加载的配置文件,主要是 php.inidisable_functions中去除我们想执行的系统函数重启php-fpm,使用配置生效3.这里选择 'exec()' 函数,感觉比较合适。下面描述下,代码里碰到的几个坑:命令行运行:java -jar /data/download/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar 董学敏简历.doc 董学敏简历.pdf是没有问题的!1>复制过来直接用$command = 'java -jar /data/download/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar 董学敏简历.doc 董学敏简历.pdf';exec($command, $output, $return_var);dump($command);dump($output);// 输出 []dd($return_var);// 输出 127/*127 - 错误代码原因:找不到命令想到 'java' 命令,未写系统路径,然而 'ls' 命令有效,不用全路径 *//*这里引入非常关键的一个知识:Linux Shell Exit And Exit Code(我描述的汉语式英语可能不对。。。)网上搜索到几篇:http://www.faqs.org/docs/abs/HTML/exit-status.htmlhttp://www.virtsync.com/c-error-codes-include-errno(这个不知道准不准)可以分析错误代码原因 */2.修改全路径后$command = '/usr/java/default/bin/java -jar /data/download/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar 董学敏简历.doc 董学敏简历.pdf';exec($command, $output, $return_var);dump($command);dump($output);// 输出 []dd($return_var);// 输出 1/*1 - 错误代码:'我真的不太清楚。。。' *//*继续搜索,关于 'exec()' 调试的一个方案:exec()本身会将输出返回到 $output 参数,但是不是错误不输出???所以这里的方案就是将 '标准错误输出' 输出给 '标准输出'命令后追加:' > 2&1' */3.开启调试后$command = '/usr/java/default/bin/java -jar /data/download/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar 董学敏简历.doc 董学敏简历.pdf > 2&1';exec($command, $output, $return_var);dump($command);dump($output);// 输出 []/*array:10 [▼0 => "Dec 18, 2017 4:25:13 PM com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection connect"1 => "INFO: connected"2 => "Dec 18, 2017 4:25:13 PM com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection disposing"3 => "INFO: disconnected"4 => "Exception in thread "main" java.lang.IllegalArgumentException: inputFile doesn't exist: /data/download/??????????????????.doc"5 => "\tat com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(AbstractOpenOfficeDocumentConverter.java:90)"6 => "\tat com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(AbstractOpenOfficeDocumentConverter.java:74)"7 => "\tat com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(AbstractOpenOfficeDocumentConverter.java:70)"8 => "\tat com.artofsolving.jodconverter.cli.ConvertDocument.convertOne(ConvertDocument.java:154)"9 => "\tat com.artofsolving.jodconverter.cli.ConvertDocument.main(ConvertDocument.java:133)"] */dd($return_var);// 输出 1/*可以看到调试错误了:输入文件名,不存在。因为中文变为乱码的问题! *//*我换成英文就OK了,我们确实可以通过代码,修改机制,还借助英文来处理下,但是有点麻烦,不是我们想要的。解决方法:1.exec()先执行'export LANG=en_US.UTF-8;'2.$locale = 'zh_CN.UTF-8';setlocale(LC_ALL, $locale);putenv('LC_ALL='.$locale);(看来应该就是非 UTF-8 编码的问题)参考资料:https://mikecoder.cn/?post=135https://segmentfault.com/q/1010000004623093/ */4.指定字符集后$set_charset = 'export LANG=en_US.UTF-8;';$command = '/usr/java/default/bin/java -jar /data/download/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar 董学敏简历.doc 董学敏简历.pdf > 2&1';exec($set_charset . $command, $output, $return_var);dump($set_charset . $command);dump($output);// 输出 []/*// 第一种设置显示array:4 [▼0 => "Dec 18, 2017 4:45:17 PM com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection connect"1 => "INFO: connected"2 => "Dec 18, 2017 4:45:17 PM com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection disposing"3 => "INFO: disconnected"]// 第二种设置显示array:4 [▼0 => "十二月 18, 2017 4:37:33 下午 com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection connect"1 => "信息: connected"2 => "十二月 18, 2017 4:37:33 下午 com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection disposing"3 => "信息: disconnected"] */dd($return_var);// 输出 0

阅读全文
0 0