0

私のコードでは、Laravel 5.3でLaravelCollectiveの SSH を使用したクロージャーを使用しています。

しかし、私の驚きは、コマンドの return exit を試して、切り捨てられた結果を得たときです。

$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

さて、このコードは最初の部分 (echo $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

いくつかのオプションを試してみましたが、どれもうまくいきます。

完璧なエコー行が表示される理由がわかりませんが、後で作業するために配列に挿入できません。

いくつかのコメントの後に編集します。

私はそれが閉鎖であるという問題を見ていますline.SSHコマンドのどのように "\n"で文字列を取得します. 文字列の切り捨ての最大サイズを取得した後、クロージャーの新しい反復を実行します。問題だと。

4

1 に答える 1

0

いくつかのテストの後、私は解決策を見つけましたが、それはあまり適切ではないようです。

問題は、SSH の run メソッドが必要なだけ多くの文字列を返すことです。バイト制限についてはわかりません。

配列には切り捨てられた要素が含まれるため、配列を使用することはできません。そのため、私の意見では、行を文字列として抽出し、後で処理することをお勧めします。

誰かが非常に感謝の気持ちを込めて返信できる場合は、

$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ます)

于 2016-12-02T19:06:31.570 に答える