Exec Linux命令作为PHP用户

时间:2014-05-31 15:08:46

标签: php linux

我将文档文件转换为html。我在Linux服务器上安装了LibreOffice。

这是命令,

$cmd = "libreoffice4.1 --headless -convert-to html /var/www/html/CV.doc -outdir /var/www/html/";

当我直接在Linux服务器上执行时,此命令工作正常,但当我尝试通过PHP执行它时,它将无法转换。

exec($cmd,$out,$err);

$err正在打印127

请告诉我这里我做错了什么。

2 个答案:

答案 0 :(得分:0)

最常见的原因是$PATH环境变量尚未填充到PHP应用程序中。在这种情况下,使用libreoffice的完整路径:

$cmd = "/usr/bin/libreoffice4.1 --headless  ... ";

您的系统上的路径/usr/bin可能有所不同。在终端输入which libreoffice4.1以找到它。


问题的另一个原因可能是将文件写入目标目录或读取原始文档的权限不足。在这种情况下,请确保php应用程序具有相应的权限。 !root权限必须才是必需的!这将是您申请中的安全漏洞。

答案 1 :(得分:0)

你这样说:

  

当我直接在Linux上执行时,此命令正常工作   服务器,但当我尝试通过PHP执行它时,它将无法转换。

你的命令是这样的:

$cmd = "libreoffice4.1 --headless -convert-to html /var/www/html/CV.doc -outdir /var/www/html/";

可能是当用户登录系统时,libreoffice4.1的路径是默认用户路径的一部分。但是当Apache(我假设)运行PHP时,它不知道libreoffice4.1二进制文件在哪里。

所以我的解决方案是在命令中包含文件的完整路径,如下所示:

$cmd = "/full/path/to/this/binary/libreoffice4.1 --headless -convert-to html /var/www/html/CV.doc -outdir /var/www/html/";

当然用文件的实际路径替换/full/path/to/this/binary/

您可以通过登录您的服务器轻松确定二进制文件的完整路径。输入以下命令:

which libreoffice4.1

返回的输出应该是libreoffice4.1二进制文件的完整路径。路径应该是这样的:

/usr/bin/libreoffice4.1

或者这个:

/usr/local/bin/libreoffice4.1

但是系统上的which命令将返回文件的完整路径,因此请将该输出用作指南。