Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP SSH2在远程位置创建zip文件_Php_Zip_Ssh2 Exec - Fatal编程技术网

使用PHP SSH2在远程位置创建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 &&

我正在使用filemanager,我的用户应该能够从他们的整个根目录下载.zip文件。 我正在使用以下脚本:

$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兼容层进行尝试。已欣赏、已欣赏、已欣赏、已欣赏、已欣赏、已欣赏、已欣赏、已欣赏、已欣赏、已欣赏