я использую phpseclib на своем локальном компьютере для загрузки mysqldummp с удаленного сервера, это мой код:
set_include_path( './phpseclib');
require_once 'NET/SSH2.php';
require_once 'NET/SFTP.php';
require_once 'Crypt/RSA.php';
require_once 'Math/BigInteger.php';
$privatekey = file_get_contents('/path/to/.ssh/id_rsa');
$rsa = new Crypt_RSA();
$rsa->setPassword('');
if ($rsa->loadKey($privatekey, CRYPT_RSA_PRIVATE_FORMAT_PKCS1 ) === false) {
exit ("private key loading failed!");
$ssh = new Net_SSH2('example.com');
if (!$ssh->login('root', $rsa)) {
exit('Login Failed');
}
ini_set('zlib.output_compression', 'Off'); // tried removing this line too
header("Content-disposition: attachment; filename=sql.tar.gz");
header("Content-Type: text/javascript");
header("Content-Encoding: application/x-gzip");
echo $ssh->exec('mysqldump -uuser -ppass dbname tablename | gzip -9');
Когда я открываю эту страницу в моем браузере на моем локальном хосте, он предлагает загрузить файл sql.tar.gz, но файл не извлекается, кажется, он поврежден.
ребята, пожалуйста, скажите мне, если я делаю что-то не так
Я думаю, тебе повезет больше header('Content-Encoding: gzip');
затем с использованием кодировки контента, которую вы используете.
Когда я пытался сделать mysqldump -uuser -ppass dbname tablename | gzip -9
Я получил следующее:
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
mysqldump: Got errno 32 on write
Если вы удалите все заголовки и выполните функцию strlen () на $ssh->exec()
выход, что вы получаете? Мне интересно, если то, что ты получаешь обратно, вообще сжимается. Если нет, то, возможно, попробуйте -f
вариант, что команда, которую я побежал, предложил.
Ваш код может быть много очищен.
set_include_path( './phpseclib');
require_once 'NET/SSH2.php';
require_once 'NET/SFTP.php';
require_once 'Crypt/RSA.php';
require_once 'Math/BigInteger.php';
$privatekey = file_get_contents('/path/to/.ssh/id_rsa');
$rsa = new Crypt_RSA();
$rsa->setPassword('');
if ($rsa->loadKey($privatekey, CRYPT_RSA_PRIVATE_FORMAT_PKCS1 ) === false) {
Включать NET / SSH2.php не нужно, поскольку NET / SFTP.php включает его. Кроме того, в том числе Math / BigInteger.php не нужно, поскольку в него включены и NET / SSH2.php, и Math / BigInteger.php.
призвание $rsa->setPassword('');
также не требуется, так как (я уверен на 80%) пустые пароли принимаются по умолчанию и $rsa->loadKey($privatekey, CRYPT_RSA_PRIVATE_FORMAT_PKCS1 )
Можно
Других решений пока нет …