【问题标题】:shell_exec not workingshell_exec 不工作
【发布时间】:2010-12-14 13:29:46
【问题描述】:

这是我的命令:

sudo /usr/local/bin/jpegoptim --max=50 /home/someuser/public_html/reports/images/r121662.jpg

此命令应该压缩图像。我尝试使用反引号运算符和 shell_exec 运行此命令,但都不起作用。文件未压缩。

但是当我直接在以someuser 登录的shell 中运行它时,该命令就会运行。我已修改 sudoers 以接受命令而不需要密码。当我在 shell 中运行该文件时,它会被压缩。

Apache 配置为使用 suPHP 运行,PHP 文件也属于 someuser。我通过编写一个测试 php 脚本只是说 system(id); 并在浏览器中运行它来进一步确保这一点。这告诉我该脚本确实由someuser 运行。

此外,safe_mode 已关闭。

编辑:好的,我让它输出错误

sudo: sorry, you must have a tty to run sudo

现在,这是什么意思?!

【问题讨论】:

  • 在shell中运行时有输出吗?
  • 不,我尝试回显输出,根本没有输出
  • 你能用 sudo 任何其他命令吗?
  • 将 /bin/ls 添加到 sudoers 并使用 shell_exec 执行了 sudo ls,没有输出
  • 尝试使用php.net/manual/en/function.exec.php 来检索输出而不是shell_exec...

标签: php shell


【解决方案1】:

感谢 Catalin ,我能够得到输出。它说sudo: sorry, you must have a tty to run sudo 需要为someuser 禁用requiretty。这是我得到的最佳解决方案,如果有办法为单个用户调用单个命令禁用 requiretty,请告诉我。

【讨论】:

  • 很高兴我可以帮助调试:P
  • 您可以在 sudoers 上使用此条目为单个用户打开 requiretty:默认值:someuser !requiretty
【解决方案2】:

sudo 通常需要终端输入(即must have a tty),因为它会在允许您执行命令之前尝试询问用户密码。你真的需要使用sudo 来运行命令吗?尝试删除sudo

【讨论】:

  • 能否提供具体的错误信息? /home/someuser/public_html/reports/images/r121662.jpg/home/someuser/public_html/reports/images/ 的权限是什么?
【解决方案3】:

尝试sudo -S 看看是否将其设置为从标准输入读取密码(即使它不需要密码)是否会绕过对 tty 的测试。

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 2014-05-23
    • 2010-11-09
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多