使用PHP SSH2在远程位置创建zip文件
我正在使用filemanager,我的用户应该能够从他们的整个根目录下载.zip文件。 我正在使用以下脚本:使用PHP SSH2在远程位置创建zip文件,php,zip,ssh2-exec,Php,Zip,Ssh2 Exec,我正在使用filemanager,我的用户应该能够从他们的整个根目录下载.zip文件。 我正在使用以下脚本: $cmd = ""; if(count($files) > 0) { foreach($files as $file) { $cmd .= " ". $file['name']; } } $cmd = "cd /home/product$this->_product$path &&
$cmd = "";
if(count($files) > 0) {
foreach($files as $file) {
$cmd .= " ". $file['name'];
}
}
$cmd = "cd /home/product$this->_product$path && zip -r $filename.zip$cmd";
if(ssh2_exec($this->_con, "cd /home/product1/include && zip -r include.zip gl_spawns.inc gl_common.inc")) {
return $cmd;
}
不管怎么说,这个脚本工作得很好,与这个问题没有多大关系,
下面是您看到的由上面看到的脚本返回的cmd:
cd /home/product1/include && zip -r include.zip gl_spawns.inc gl_common.inc
当我使用putty将这个cmd输入ssh屏幕时,它工作得非常完美。
但是当我在php中使用ssh2_exec运行这个cmd时,它只创建了zip文件的一部分,称为随机名称,没有扩展名,似乎zip进程由于某种原因被取消了。
每次都是这样
有人知道解决这个问题的方法吗
谢谢你的阅读。你的运气可能会更好。例如
你的运气可能会更好。例如
你的运气可能会更好。例如
你的运气可能会更好。例如
我找到了一个解决方案,似乎ssh2\u exec不能很好地处理乘法命令,这就是ssh2\u shell的用武之地,我将脚本的一部分转换为以下代码:
$cmds[0] = "cd /home/product$this->_product$path;";
$cmds[1] = "zip -r $filename.zip$cmd;";
$out = '';
$shell=ssh2_shell($this->_con);
for($i=0; $i<count($cmds); $i++) {
fwrite($shell, $cmds[$i] . PHP_EOL);
sleep(1);
while($buffer = fgets($shell)) {
flush();
$out .= $buffer;
}
}
$cmds[0]=“cd/home/product$this->\u product$path;”;
$cmds[1]=“zip-r$filename.zip$cmd;”;
$out='';
$shell=ssh2\u shell($this->\u con);
对于($i=0;$i我已经找到了一个解决方案,似乎ssh2\u exec并不能很好地处理乘法命令,这就是ssh2\u shell的用武之地,我将脚本的一部分转换为以下代码:
$cmds[0] = "cd /home/product$this->_product$path;";
$cmds[1] = "zip -r $filename.zip$cmd;";
$out = '';
$shell=ssh2_shell($this->_con);
for($i=0; $i<count($cmds); $i++) {
fwrite($shell, $cmds[$i] . PHP_EOL);
sleep(1);
while($buffer = fgets($shell)) {
flush();
$out .= $buffer;
}
}
$cmds[0]=“cd/home/product$this->\u product$path;”;
$cmds[1]=“zip-r$filename.zip$cmd;”;
$out='';
$shell=ssh2\u shell($this->\u con);
对于($i=0;$i我已经找到了一个解决方案,似乎ssh2\u exec并不能很好地处理乘法命令,这就是ssh2\u shell的用武之地,我将脚本的一部分转换为以下代码:
$cmds[0] = "cd /home/product$this->_product$path;";
$cmds[1] = "zip -r $filename.zip$cmd;";
$out = '';
$shell=ssh2_shell($this->_con);
for($i=0; $i<count($cmds); $i++) {
fwrite($shell, $cmds[$i] . PHP_EOL);
sleep(1);
while($buffer = fgets($shell)) {
flush();
$out .= $buffer;
}
}
$cmds[0]=“cd/home/product$this->\u product$path;”;
$cmds[1]=“zip-r$filename.zip$cmd;”;
$out='';
$shell=ssh2\u shell($this->\u con);
对于($i=0;$i我已经找到了一个解决方案,似乎ssh2\u exec并不能很好地处理乘法命令,这就是ssh2\u shell的用武之地,我将脚本的一部分转换为以下代码:
$cmds[0] = "cd /home/product$this->_product$path;";
$cmds[1] = "zip -r $filename.zip$cmd;";
$out = '';
$shell=ssh2_shell($this->_con);
for($i=0; $i<count($cmds); $i++) {
fwrite($shell, $cmds[$i] . PHP_EOL);
sleep(1);
while($buffer = fgets($shell)) {
flush();
$out .= $buffer;
}
}
$cmds[0]=“cd/home/product$this->\u product$path;”;
$cmds[1]=“zip-r$filename.zip$cmd;”;
$out='';
$shell=ssh2\u shell($this->\u con);
对于($i=0;$i您可以这样做:
$ssh->exec("
cd home/path/anotherpath/
zip -rv archive.zip ./*
");
$ssh->exec("
cd home/path/anotherpath/; zip -rv archive.zip ./*
");
注意换行符
或者这样:
$ssh->exec("
cd home/path/anotherpath/
zip -rv archive.zip ./*
");
$ssh->exec("
cd home/path/anotherpath/; zip -rv archive.zip ./*
");
您可以这样做:
$ssh->exec("
cd home/path/anotherpath/
zip -rv archive.zip ./*
");
$ssh->exec("
cd home/path/anotherpath/; zip -rv archive.zip ./*
");
注意换行符
或者这样:
$ssh->exec("
cd home/path/anotherpath/
zip -rv archive.zip ./*
");
$ssh->exec("
cd home/path/anotherpath/; zip -rv archive.zip ./*
");
您可以这样做:
$ssh->exec("
cd home/path/anotherpath/
zip -rv archive.zip ./*
");
$ssh->exec("
cd home/path/anotherpath/; zip -rv archive.zip ./*
");
注意换行符
或者这样:
$ssh->exec("
cd home/path/anotherpath/
zip -rv archive.zip ./*
");
$ssh->exec("
cd home/path/anotherpath/; zip -rv archive.zip ./*
");
您可以这样做:
$ssh->exec("
cd home/path/anotherpath/
zip -rv archive.zip ./*
");
$ssh->exec("
cd home/path/anotherpath/; zip -rv archive.zip ./*
");
注意换行符
或者这样:
$ssh->exec("
cd home/path/anotherpath/
zip -rv archive.zip ./*
");
$ssh->exec("
cd home/path/anotherpath/; zip -rv archive.zip ./*
");
使用ssh2和phpseclib都不起作用,解决我的问题的方法是在静默模式下调用zip命令:zip-uqr container.zip文件夹
,因此没有任何输出使用ssh2和phpseclib都不起作用,解决我的问题的方法是在静默模式下调用zip命令:zip-uqr container.zip文件夹
没有任何输出使用ssh2和phpseclib都不起作用,解决问题的方法是在静默模式下调用zip命令:zip-uqr container.zip文件夹
因此没有任何输出使用ssh2和phpseclib都不起作用,解决问题的方法是在静默模式下调用zip命令:zip-uqr container.zip folder
因此没有任何输出谢谢,但是要将我所有的脚本转换为phpseclib需要做很多工作,我会的,但是我认为它也应该与ssh2_exec一起工作。我发现了一些可能会澄清问题的东西,当我不使用CD命令时,我只做了一个命令,它可以工作,但是它得到了我服务器insi的完整目录结构解压缩zip文件,我不想让用户看到。您可以使用它使代码使用phpseclib,而无需重写代码。例如,可以在服务器上禁用libssh2,并使用phpseclib兼容层进行尝试。谢谢,但将我的所有脚本转换为phpseclib需要做很多工作,我会的,但我认为它也应该与ssh2_exec一起工作。我发现了一些可能会澄清问题的东西,当我不使用CD命令时,我只做了一个命令,它就工作了,但是它在zip文件中得到了我服务器的完整目录结构,我不想让用户看到。您可以使用它,这样您的代码就可以使用phpseclib,而不必重新编写修改你的代码。比如在服务器上禁用libssh2,然后改为在phpseclib兼容层上试用。谢谢,但是要将我所有的脚本转换为phpseclib需要做很多工作,我可以这样做,但我认为它也应该与ssh2_exec一起工作。我发现了一些可能会解决问题的方法,当我不使用CD命令时,我只做了一个逗号d、 它可以工作,但是它在zip文件中得到了我服务器的完整目录结构,我不想让用户看到。您可以使用它使代码使用phpseclib,而不必重写代码。例如,可以在服务器上禁用libssh2,并改为使用phpseclib兼容层进行尝试。谢谢,但这是必须的要将我所有的脚本转换为phpseclib,我可能会做很多工作,但我认为它也应该与ssh2_exec一起工作。我发现了一些可能会澄清的事情,当我不使用CD命令时,我只做了一个命令,它可以工作,但是它在zip文件中得到了我服务器的完整目录结构,我不希望用户看到。你可能是可以使用使代码使用phpseclib而无需重写代码。例如,可以在服务器上禁用libssh2,并改为使用phpseclib兼容层进行尝试。已欣赏、已欣赏、已欣赏、已欣赏、已欣赏、已欣赏、已欣赏、已欣赏、已欣赏、已欣赏