shell_exec 不适用于查找

shell_exec doesn't work with find

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

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

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

您正试图在根目录中找到某些内容,您的 Web 服务器无权访问(按设计)- 您想要做的是安全问题,所以我的建议是将您的作品放在您网站内的一个文件夹中,该文件夹归允许访问您驱动器上文件的同一用户所有,通常为 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

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

请勾选getenv('PATH')并尝试使用绝对路径查找。通常的位置是 /usr/bin/find 或 /bin/find.

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