【问题标题】:Unable to run inkscape in PHP shell_exec() command无法在 PHP shell_exec() 命令中运行 inkscape
【发布时间】:2016-07-07 18:27:57
【问题描述】:

我有一个design tool extension,用于我正在开发的网站。设计工具使用inkscape 命令行导出图像。有一个 php 接口可用于最终调用shell_exec($inkscapeCmd) 的命令行操作。在注意到图像文件没有被导出后,我创建了一些测试来尝试调试。我将执行行更改为shell_exec($inkscapeCmd . ' 2>&1'),以便查看错误消息:

sh: inkscape: command not found

...这很奇怪,因为它肯定已经安装并且可以访问。我在我的测试页面上添加了对用户的检查,以确保命令由有权访问 inkscape 的用户执行:

$processUser = posix_getpwuid(posix_geteuid()); echo 'user: ' . $processUser['name'];

然后我 ssh 进入服务器以确认我可以运行与该用户相同的命令,并且能够毫无问题地运行它们(这也证实了 inkscape 在 PATH 中)。我可以毫无问题地从 PHP 运行其他基本的 shell 命令,如下所示:

echo shell_exec('ls');

但现在我不知所措了;我不确定还要检查什么来确定为什么我会收到“找不到命令”错误。任何方向都会有所帮助。

服务器(相当旧,我知道):

  • CentOS 6.7
  • PHP 5.3.3
  • Inkscape v0.47

【问题讨论】:

  • 为什么这被否决了?我以为我问了一个合理的问题,最终得到了我想要的答案;设计工具需要可执行文件的路径(在配置文件中定义不正确)。

标签: php linux shell-exec inkscape


【解决方案1】:

该进程的路径中没有 inkscape 的位置。

您必须提供可执行文件的完整路径。

例子

/usr/bin/inkscape

在命令行输入“whereis inkscape”来查找位置。

【讨论】:

  • 做到了。您是否有机会解释为什么在这种情况下该过程需要完整路径?不使用进程用户的路径吗?
  • 您登录的用户与运行 Web 服务器的用户不同。在命令行上执行“echo $PATH”。这将显示您的路径。您无需指定完整的程序路径即可运行可执行文件。运行 Web 服务器的用户很可能被精简到最低限度。这就是为什么如果您查看大量基于 Web 的软件,您需要为某些系统软件填写路径。
  • 以前,我从命令行测试时确实以Web服务器用户身份登录。当 Web 服务器是发起者时,是否有某种修改的设置/路径?不确定这是否是提出这个问题的正确方式?
  • 你必须深入 CentOS 并假设 apache。了解发生了什么。我敢肯定有很多事情要保护网络服务器。我自己只是喜欢在配置文件中填写完整路径。一个附带的好处是您需要拥有不同版本的主发行版,您可以将其放在不同的位置供您访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 2014-05-30
  • 1970-01-01
  • 2011-06-29
相关资源
最近更新 更多