shell whoami不等于php shell_exec whoami?

时间:2012-01-20 20:58:48

标签: php shell imagemagick

在一个shell中我做了简单的whoami,我得到了geoff,这很好,因为那就是我。

在php文件中我有shell_exec('whoami');我没有人。

在我看来,这可能是解释我原始问题的一个区别:imagemagick可以从shell运行,但不能在php脚本中运行。

现在通过这个网站工作,我认为这意味着我的apache xampp会分配不同的用户名,而不是使用我通常的用户名。

我试图通过sudo改变我在php中的登录信息,但这对我来说还不起作用。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

应该很容易理解。

  • 在shell中,您以Unix用户geoff身份登录,这就是您所获得的。
  • PHP在Unix中的httpd进程中运行,其中nobody为所有者,这就是从PHP shell_exec('whoami');获得的结果。

答案 1 :(得分:1)

@anubhava在运行whoami时获得两个不同答案的原因是正确的。但是,如果您尝试使用ImageMagick将PDF转换为PNG(就像您对问题的评论一样),如果脚本的PATH不包含,即使使用ImageMagick的convert的完整路径也行不通Ghostscript的路径位置也是。在不弄乱任何用户路径的情况下,您可以添加:

putenv("PATH=/usr/local/bin:/usr/bin:/bin");

或类似的东西取决于您的设置。 gs可执行文件必须位于脚本用户的路径中,否则ImageMagick将无法转换PDF或EPS文件。

答案 2 :(得分:0)

您获得的whoami结果只表示您的apache正在以nobody运行。这是应该的,我强烈建议不要改变它。

imagemagick不起作用的原因可能与运行php代码的权限没有直接关系。没有足够的信息来准确诊断问题,但很可能是可执行文件或库搜索失败。确保nobody可以读取二进制文件和库,并且它们位于apache将找到它们的位置。特别要确保$PATH$LD_LIBRARY_PATH设置正确。

答案 3 :(得分:0)

  1. 将“2>& 1”添加到您的命令
  2. 指定shell_exec的完整路径(没有人没有$ PAHT,所以它只是不知道imagemagic二进制文件的存储位置。
  3. 尝试在控制台上以用户身份运行脚本以查看是否出错。