【发布时间】:2012-01-24 19:12:33
【问题描述】:
我有一个脚本,它调用以下命令来获取未读消息的数量:
sudo ls /var/vmail/username/new | wc -l
这在从 shell 运行时可以正常工作(设置了权限并且无需提供密码也可以正常运行)。
但是当使用exec从PHP运行时,它会按预期执行,但它总是返回0。
这可能是什么原因造成的?如何调试或解决问题?
(php 5.3, redhat, apache with ~default config)
编辑
感谢ruaks 的提示。问题是:sudo: sorry, you must have a tty to run sudo。注释掉 /etc/sudoers 中的条目有帮助:
Defaults requiretty
Defaults:apache !requiretty
但看起来这对安全性不太好。还有其他更好的解决方案吗?
【问题讨论】:
-
PHP 是否在与手动通过 shell 测试时相同的用户 ID 下执行?
-
当您使用
exec从 PHP 运行sudo ls /var/vmail/username/new 2>&1时会得到什么? -
我在问题中添加了一些进一步的细节。