我需要从php运行一个linux命令。所以我使用了ftp_exec()
函数。
$command='ls -al> /ftp_test/t.log';
if (ftp_exec($ftp_conn,$command))
{
echo "$command executed successfully.";
}
else
{
echo "Execution of $command failed.";
}
但它给了我警告
警告:ftp_exec((:未知SITE命令
我在谷歌上搜索了一下,发现ftp_exec
"通过FTP执行并没有得到广泛支持。在你开始编码需要它的东西之前,请检查它是否在你想要连接的服务器上工作。">
有人能给我一个从php运行linux命令的想法吗?
如果您有适当的授权,您可以通过SSH:进行授权
$file_list = shell_exec('ssh user@site "ls -la"');
对于user
,您需要为site
、和拥有一个授权的ssh密钥,无论哪个用户运行PHP,都必须可以访问该用户。这通常可以归结为对两者都使用用户wwwrun
。
或者您可以使用sudo
来增加安全性,方法是将命令放入自己的脚本中,然后执行:
$file_list = shell_exec('sudo /usr/local/bin/ssh-ls-site');
现在,用户wwwrun
可以运行ssh-ls-site
,但不能修改其内容,因此他不能运行任意命令,也不能访问ssh授权密钥。
ssh-ls-site
可以记录请求以及更新本地标记文件,如果文件更新到某个保护时间,则立即退出。这将防止对站点可能的DoS攻击(运行批允许的命令,耗尽资源(,并提高性能;例如,如果需要经常运行该命令,可以将结果保存到临时文件中。然后,如果发现该文件存在,并且不太旧,则只需读回其内容,而不需要将其请求到@site
,从而有效地在本地缓存该命令。