[英]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.