【问题标题】:shell whoami doesn't equal php shell_exec whoami?shell whoami 不等于 php shell_exec whoami?
【发布时间】:2012-01-20 20:58:47
【问题描述】:

在 shell 中,我执行简单的 whoami,然后得到 geoff,这很好,因为我就是这样。

在一个 php 文件中,我有 shell_exec('whoami');我没有得到任何人。

在我看来,这可能是解释我最初的问题的不同之处:imagemagick 在 shell 中工作,但在 php 脚本中不起作用。

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

我曾尝试通过 sudo 在 php 中更改我的登录名,但目前这对我不起作用。

谁能帮忙?

【问题讨论】:

  • 你能贴出不起作用的代码,以及你得到的实际结果吗?从 shell 调用 imagemagick 时,您可能需要指定它的路径,并确保它尝试输出到的任何目录都可以由用户nobody 写入。
  • 用户nobody 可能没有$PATH 或不完整的$PATH。从 PHP 调用 ImageMagick 二进制文件时指定完整路径。
  • shell_exec('/usr/local/bin/convert -verbose /Users/geoff/Sites/Test/test.pdf /Users/geoff/Sites/Test/result.png 2>&1 1> /dev/null');你提到输出目录,我可以选择这个吗?澄清一下,我已经包含了完整的路径,但是没有用。

标签: php shell imagemagick


【解决方案1】:

应该简单易懂。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 一读到你的评论,我就有一种直觉,你已经一针见血了:现在确实有效。天才!非常感谢您和所有提供帮助的人。
    • @Geoff:很高兴为您提供帮助。大约一年前,我与那个确切的问题作斗争。 ;)
    【解决方案3】:

    您从whoami 获得的结果仅仅意味着您的apache 以nobody 运行。这是应该的,我强烈建议不要更改它。

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

    【讨论】:

    • 这听起来很有希望。我从上面的代码中得到的错误信息是:UnableToOpenConfigureFilePostscriptDelegateFailedMissingAnImageFilename。图书馆在哪里?
    • /lib/usr/lib 等一些地方。有关详细信息,请参阅例如ld 手册页(准确地说:-rpath-link 选项的描述),但带有这些错误消息实际上,图书馆似乎没有问题。它说它找不到配置文件,因此您需要检查它在哪里寻找它并确保它找到它(通过将配置放在预期的位置或使用适当的命令行选项将其定向到配置是)。为了找出它在哪里寻找配置,请尝试strace
    【解决方案4】:
    1. 将“2>&1”添加到您的命令中
    2. 指定 shell_exec 的完整路径(没有人没有 $PAHT,所以它只是不知道 imagemagic 二进制文件的存储位置。
    3. 尝试在控制台上以用户身份运行脚本以查看是否出错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2020-11-15
      • 1970-01-01
      • 2018-12-29
      • 2023-03-24
      • 1970-01-01
      • 2021-02-19
      相关资源
      最近更新 更多