我使用phpseclib從Web瀏覽器SSH到我的遠程服務器並執行一個PHP文件。以下是我使用的代碼:phpseclib ssh exec回調不工作
$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中的第一個回顯並停止執行。有沒有辦法從執行腳本獲取實時數據?
雖然我的回調函數packet_handler在執行exec後沒有運行,但我仍然使用phpseclib中的example進行回調。一旦我通過SSH執行的main.php已經完成執行,我想重定向到另一個頁面。現在,如果我重定向到該頁面,我只獲得部分結果,因爲main.php文件尚未完成其執行。我試圖使用睡眠(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');
?>
感謝您的幫助。我現在沒有包含回調。這是我的日誌輸出。 http://pastebin.com/PzKe5sUv我發現在我的main.php文件中回顯的數據在日誌中可用,但在執行它時不顯示。關於我的文件的輸出:我解析一個csv文件,並使用解析的數據對Web服務執行soap調用並顯示結果。我嘗試使用if(read('my final echo'){重定向到另一個文件;}但無論我給出什麼字符串,它都會被執行,如何使用read()來發現main.php已經完成執行。 –