2016-12-02 6 views
0

я использую на моем коде замыкание с SSH из LaravelCollective на Laravel 5.3Возвращайтесь правильным массивом от закрытия

Но мой 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 

Я пробую несколько вариантов, но все работает нормально.

Я не понимаю, почему я вижу идеальные эхо-строки, но не могу вставить в массив для работы более позднее.

EDIT после некоторых комментариев.

Я вижу, что проблема заключается в закрытии, получите команду SSH line, как строка с "\ n". После получения максимального размера для обрезания строки и запуска новой итерации закрытия. Это проблема.

+1

Дон» t вы хотите сделать '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 => "" 
] 

Внимание к пределу строки (2 Гб, но и другие ограничения накладывает на memory_limit)