当我注意到我无法从以下结果中获得结果时,我只是在测试和摆弄安全性的东西:
<?php echo shell_exec('history'); ?>
同样指的是:
<?php echo shell_exec('fc -l 1'); ?>
最后两个都尝试了2>&1
,但毕竟 - history
不是命令。也在CLI下尝试:
php -r "echo shell_exec('fc -l 1');"
不返回任何内容。已尝试使用system()
和exec()
(=不返回结果)。在同一时间:
history
和fc -l 1
; ls
在Web和CLI上执行其他命令,例如shell_exec()
; history
和fc -l 1
会返回结果; 答案 0 :(得分:1)
shell_exec()
运行sh
。历史记录是其他shell中可用的扩展功能,例如bash
,ksh
和zsh
,但通常不在sh
中(在某些操作系统上,sh
是指向bash
的链接,但bash
会检查其运行的名称,并在调用sh
时禁用许多扩展名。)
你可以这样做:
shell_exec("bash -c 'history'");
运行bash
并执行其history
命令。
另请注意,历史记录机制通常仅在交互式shell中启用,而不是从程序调用的shell。
答案 1 :(得分:0)
找到答案。似乎大多数shell都将history
命令作为 shell内置包含在内。来自维基百科:
shell builtin是一个从shell调用的命令或函数 直接在shell本身执行,而不是外部执行 shell将加载并执行的可执行程序。
来源:https://en.wikipedia.org/wiki/Shell_builtin
PHP shell标注由sh
处理,但大多数理智的人使用bash
将其历史存储在其他位置。同样,shell历史记录通常仅在正常关闭期间由交互式shell编写。