通过 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 ...
脚本按预期运行
我试图设置一个脚本,将 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 ...
脚本按预期运行