变量内容消失

时间:2016-11-21 15:57:49

标签: php mysql command-line-interface cakephp-3.x libssh2

我正在编写一个cake-shell脚本,它通过ssh连接到服务器,然后转储一些mysql表。

这部分都没问题,并且创建了转储;但是因为我想从中收集转储的主机不止一个,所以文件名中必须有主机。

在这里,奇怪的事情(甚至我的同事和教师都无法解释......)发生了:

有一个名称为$ host的变量,它包含主机的url,这应该是文件名前缀... 但是在GetDump()的第二次调用中......这个变量是空的。

这是我的代码:     

use Cake\Console\Shell;

class DatabaseBackupShell extends Shell
{

    private $ssh_connection = null;
    private $host = null;

    public function getOptionParser()
    {
        $parser = parent::getOptionParser();

        return $parser;
    }

    public function main() 
    {
        $this->host = 'canopus.uberspace.de';

        $this->connect($this->host,'22','tsuki','~/.ssh/id_rsa.pub','~/.ssh/id_rsaNOPASSWORD');

        $databases = ['tsuki_testdatenbank','tsuki'];

        foreach ($databases as $database) {
            $this->getDump($database);
        }
    }

    public function connect($ssh_host, $ssh_port, $ssh_auth_user, $ssh_auth_public_key, $ssh_auth_private_key) 
    {
        $this->ssh_connection = ssh2_connect($ssh_host, $ssh_port);
        ssh2_auth_pubkey_file($this->ssh_connection, $ssh_auth_user, $ssh_auth_public_key, $ssh_auth_private_key); 

        echo 'Connected to server '.$ssh_host.' on port '.$ssh_port.' as '.$ssh_auth_user."\n";
    }

    public function getDump($database) 
    {

            $command = sprintf('mysqldump --add-drop-table --databases %1$s > ~/meep/%2$s__%1$s__%3$s;', $database, $this->host, date("Y-m-d"));

            ssh2_exec($this->ssh_connection, $command);
            echo $command . "\n";
    }
}

这是输出:     bin / cake database_backup

Welcome to CakePHP v3.3.8 Console
---------------------------------------------------------------
App : src
Path: /var/www/html/cake-cli/src/
PHP : 7.0.8-0ubuntu0.16.04.3
---------------------------------------------------------------
Connected to server canopus.uberspace.de on port 22 as tsuki
mysqldump --add-drop-table --databases tsuki_testdatenbank > ~/meep/canopus.uberspace.de__tsuki_testdatenbank__2016-11-21;
mysqldump --add-drop-table --databases tsuki > ~/meep/__tsuki__2016-11-21;

如您所见,主机(canopus.uberspace.de)在第二次调用中不存在。 即使我在$ command的分配之前直接重新分配$ host ...它在第二次调用时仍然是空的。

P.S。:ssh2的库通过Linux Mint 18 64bit上的“apt-get install php-ssh2”安装

0 个答案:

没有答案