shell_exec不适用于find

时间:2015-11-22 16:19:55

标签: php linux shell-exec

我试图在其他人创建的服务器上实现php脚本。 我尝试echo shell_exec('ls');并且它有效。

var_dump(shell_exec('find / -name "tmp.txt"'));

返回null。 但是,当我在ssh控制台中尝试它时,输出是正确的。什么可以导致它?我可以检查什么

2 个答案:

答案 0 :(得分:2)

您尝试在根目录中找到某些内容,而您的网络服务器没有权限访问(按设计) - 您想要做的事情是安全问题,所以我的建议是将您的工作放在您网站内的一个文件夹中,该文件夹由允许访问驱动器上文件的同一用户拥有,通常为www-data

也许您不想阅读服务器本身的根目录,而您只想读取与该网站相同的目录中的文件。为/切换.将访问当前目录,而不是基本目录:

var_dump(shell_exec('find . -name "tmp.txt"'));

或者,您可以尝试绝对路径:

var_dump(shell_exec('find /path/to/files -name "tmp.txt"'));

这种情况并不常见,但您可能还需要指向find的绝对路径。您可以通过运行var_dump(shell_exec('find .'));来测试是否需要执行此操作,如果没有输出,那么您可能需要执行此操作。如果是这种情况,请使用/usr/bin/find

<强> Read more about how to set permissions
Apache: File and Directory Ownership and Permissions for Web Content

答案 1 :(得分:0)

原因可能是缺少PATH环境变量。

请检查getenv('PATH')并尝试使用绝对路径查找。通常的地方是/ usr / bin / find或/ bin / find。

var_dump(shell_exec('/usr/bin/find / -name "tmp.txt"'));