通过 PHP 和 SSH 提取 tar 存档 - 一半存档丢失

Extract a tar archive via PHP and SSH - half of the archive is missing

我试图设置一个脚本,将 tar 存档复制到远程服务器,然后将其解压缩。问题是,在 tar 压缩文件被解压后,解压文件夹中的内容只有一半实际存在。

这是复制功能

private function sendFile () {
  $connection1 = ssh2_connect($this->hostserver, 22);
  echo 'opened connection to remote server'."\n";
  if (ssh2_auth_password($connection1, $this->username, $this->password)) {
    echo "authentication Successful!\n";
  } else {
    die('authentication Failed...');
  }


  $localFolder  = $this->home.'/deployable/'.$this->extractedFolderName.'.tar';
  $remoteFolder = '/home/'.$this->username.'/'.$this->extractedFolderName.'.tar';

  if(ssh2_scp_send($connection1,$localFolder , $remoteFolder, 0777)) {
    echo 'file uploaded'."\n";
    ssh2_exec($connection1, 'exit');   
    echo 'closed connection1'."\n";

    $this->copySitesFolderIntoNew();

  } else {
    echo 'upload failed'."\n";
    ssh2_exec($connection1, 'exit');   
    echo 'closed connection1'."\n";
  };

...之后是 copySiteFolderIntoNew 函数,其目的是将我的 drupal 安装的当前 'site' 文件夹复制到新提取的存档中。 (它目前所做的只是提取存档)

private function copySitesFolderIntoNew () {
  $connection2 = ssh2_connect($this->hostserver, 22);
   echo 'opened  connection2'."\n";
  if (ssh2_auth_password($connection2, $this->username, $this->password)) {
    echo "Authentication Successful!\n";
  } else {
    die('Authentication Failed...');
  }

  if(ssh2_exec($connection2, 'sudo tar -xvf /home/robot/drupal-7.38.tar 2>tar.log')){
    echo 'extracted file'."\n";
  } else {
    die('extract failed');
  }


 // ssh2_exec($connection, 'sudo chmod ugo+rwx drupal-7.38.tar');
 // ssh2_exec($connection, 'sudo cp /srv/www/vhosts/test_content/sites -R /home/llrobot/drupal-7.38');
    ssh2_exec($connection2, 'exit');   
    echo 'closed connection2'."\n";
}   

有趣的是:如果行

sudo tar -xvf /home/robot/drupal-7.38.tar 2>tar.log

正在由脚本执行一半的存档不会在服务器文件夹中结束。

如果我转到服务器 (ssh) 并执行该行(提取相同的存档),整个存档将被提取。

有人有什么想法吗?

脚本的持续时间可能太长,因此脚本在完全提取之前就结束了。

问题出在这一行

if(ssh2_exec($connection2, 'sudo tar -xvf /home/robot/drupal-7.38.tar   2>tar.log')){
    echo 'extracted file'."\n";
} else {
    die('extract failed');
}

我必须学习的是 ssh2_exec 在输出 1000 行后死掉。所以答案是从 tar 命令中删除选项 'v'(详细)。没有 'v'

tar -xf ...

脚本按预期运行