PHP如何执行命令
我正在尝试使用LibreOffice将电子表格转换为另一种格式,当我从控制台执行命令时它运行正常但是当我使用exec()或system()从
PHP执行它时它不起作用.
它没有显示任何错误或任何东西,它只是默默地失败,如果我尝试执行一些简单的命令,如“ls”它工作得很好. 这是我正在使用的命令: <?php system("libreoffice --headless -convert-to ooxml '/home/www/path_to_app/file.xlsx' -outdir /home/www/path_to_app/"); 我已经尝试将/opt/lampp/etc/httpd.conf上的apache User和Group更改为我所登录的用户. 我想知道问题是www文件夹是/ home而不是我的用户内部并导致权限问题,但到目前为止无法使其工作. 任何帮助将不胜感激. 解决方法
虽然你的$PATH,提到了010提到,但我不会这样做.
LibreOffice是一个非常大的程序,有很多你不知道的代码,它会在你的$HOME目录中生成和更新文件,当然你也不能运行多个副本一次. 因此,不要让您的Web服务器启动LibreOffice,并通过将其作为比“www-data”或“nobody”更具特权的用户运行来破坏Apache的安全性,您应该创建一个处理程序. 首先,验证您是否可以从终端运行libreoffice …命令行.为了确保您没有任何X11依赖项,请在测试命令行之前在xterm中运行未设置的DISPLAY(对于bash)或unsetenv DISPLAY(对于tcsh).它破了吗?首先解决这个问题.它有用吗?很好,然后继续处理程序. 您的处理程序,最简单的形式,可以是一个永远循环的脚本,检查假脱机目录中的“要处理的文件”,如果找到它们,使用libreoffice转换它们并将结果文件放在您可以找到它的位置网络应用. #!/bin/sh while sleep 10; do if [ `ls /var/tmp/myspool/ | grep -c '.xlsx$'` -gt 0 ]; then ls /var/tmp/myspool/*.xlsx | while read file; do /usr/local/bin/libreoffice --headless -convert-to ooxml "$file" yadda yadda if [ $? = 0 ]; then mv "$file" "/var/tmp/myspool/done/ fi done fi done 如果你不想要“轮询”(每10秒检查一次假脱机目录)的开销,那么你可以让你的PHP脚本在你的处理程序监视的日志中添加一行.例如: <?php // process form,save file to spool dir syslog(LOG_NOTICE,"Saved: " . $filename); ?> 确保你已经配置了syslog来将这些消息存储在/ var / log / filelog中,然后你的处理程序可以只是拖尾日志. #!/bin/sh tail -F /var/log/filelog | while read line; do filename="`echo "$line" | sed 's/.*Saved: //'`" /usr/local/bin/libreoffice --headless -convert-to ooxml "$file" yadda yadda # etc ... error handling and mv as in the other script done 明白了吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |