繁体   English   中英

以PHP用户身份执行Linux Linux命令

[英]Exec Linux command as user in PHP

我正在将文档文件转换为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

请让我知道我在做什么错。

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

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

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


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

你这样说:

当我直接在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命令将返回文件的完整路径,因此请使用该输出作为指导。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM