2016-12-02 64 views
0

我在Laravel 5.3從封閉

在我的代碼中使用蓋子與的LaravelCollective SSH但我surpise是當任何命令嘗試返回退出返回正確的陣列,獲得截斷結果。

$exit = array(); 
SSH::run($cmd, function ($line) use (&$exit) { 
    echo $line.PHP_EOL; 
    $exit[] = $line; 
}); 
dd($exit) // dd it's a var_dump + exit helper on Laravel 

嗯,這回代碼的第一部分(回聲$ line.PHP_EOL)正確,例如下面

/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home 
/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.0 
/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.0/.appdata 
/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.0/.autorespond 
/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.0/.cpanel 
/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.0/.cphorde 
/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.0/.cpremote 
/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.0/.elinks 
... 

而導致錯誤的結果對陣列。 4

array:5 [ 
    0 => """ 
    /Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home\n 
    /Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.0\n 
    /Volumes/MACBAC 
    ... 
    """ 
    4 => """ 
    UP/cprsync_remote/hq/daily/users/tamainut/home/daily.8/tmp\n 
    /Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.8/updates\n 
    /Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.9\n 
    /Volumes/MACBACKUP/cprsync_r 

我嘗試了幾個選項,但任何工作都很好。

我不明白爲什麼我看到完美的回波線,但不能在數組上插入更多的工作。

編輯一些評論後。

我看到這個問題,它關閉,得到SSH命令的一個line如何字符串與「\ n」。獲取字符串截斷的最大大小後,運行一個新的閉包迭代。這是問題。

+1

別你的意思是做'dd($ exit);'最後看到你存儲的所有行的完整數組? – jszobody

+0

我只使用dd來查看$ exit上的值。 – abkrim

+0

我意識到這一點。但是你的數組是'$ exit'; – jszobody

回答

0

經過一些測試後,我發現了一個解決方案,儘管它看起來不太合適。

問題是,SSH運行方法,根據需要返回儘可能多的字符串,對於字節數限制,我不知道。

我們不能使用數組,因爲數組會包含截斷的元素,所以我認爲最好的方法是將行提取爲字符串並稍後處理。

如果有人可以用最感激的迴應答覆,

$exit = ''; 
SSH::run($cmd, function ($line) use (&$exit) { 
    $exit = $exit.$line; 
}); 
$arr = explode("\n",$exit); 
dd($arr); 

顯示正確結果

array:863 [ 
    0 => "/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home" 
    1 => "/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.0" 
    2 => "/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.0/.appdata" 
... 

861 => "/Volumes/MACBACKUP/cprsync_remote/hq/daily/users/tamainut/home/daily.9/updates" 
    862 => "" 
] 

注意字符串的限制(2GB但其他限制由memory_limit規定)