我试图在其他人创建的服务器上实现php脚本。
我尝试echo shell_exec('ls');
并且它有效。
var_dump(shell_exec('find / -name "tmp.txt"'));
返回null。 但是,当我在ssh控制台中尝试它时,输出是正确的。什么可以导致它?我可以检查什么
答案 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"'));