2016-12-02 68 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规定)