【发布时间】:2016-03-08 10:14:47
【问题描述】:
我使用 phpseclib 从 Web 浏览器通过 SSH 连接到我的远程服务器并执行一个 php 文件。以下是我使用的代码:
$ssh->exec('cd myfolder/; php main.php ' . $file, 'packet_handler');
function packet_handler(){
echo "Completed";
header("Location: exec_completed.php");
}
main.php 文件被执行,没有任何问题。问题在于执行后返回数据。我有以下问题:
我在 main.php 文件中做了很多处理,我需要显示脚本的实时进度。当我通过 exec 执行文件时,只打印 main.php 中的第一个 echo 并停止执行。有没有办法从执行脚本中获取实时数据。
我遵循 phpseclib 中的 example 进行回调,尽管我的回调函数 packet_handler 在 exec 执行后没有运行。一旦我通过 SSH 执行的 main.php 完成执行,我想重定向到另一个页面。现在,如果我重定向到该页面,我只会得到部分结果,因为 main.php 文件尚未完成其执行。我尝试使用 sleep(10) 但我的 main.php 有时可能需要更长的时间才能执行,所以它不起作用。请提出任何想法
来自 phpseclib 的回调示例:
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
function packet_handler($str)
{
echo $str;
}
$ssh->exec('ping 127.0.0.1', 'packet_handler');
?>
【问题讨论】: