Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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
phpseclib或ssh2 pecl扩展_Php_Libssh2_Phpseclib - Fatal编程技术网

phpseclib或ssh2 pecl扩展

phpseclib或ssh2 pecl扩展,php,libssh2,phpseclib,Php,Libssh2,Phpseclib,我昨天的帖子: 好的,昨天我开始学习使用php的SSH/SFTP。我搜索了一堆论坛帖子,猜测我需要下载phpseclib 由于对php比较陌生,因此从php5开始,我不知道以前的php4没有使用___构造函数,因此出现了上述问题/帖子 回答相互矛盾,与原始问题有点偏离主题,但这让我想到了一个问题,我觉得在继续之前需要回答: 使用ssh2 pecl扩展或phpseclib扩展哪个更好 这个问题:是一样的,但我觉得现在有点过时了,就像11月5'10日17:37被问到的,我说的是phpseclib。就

我昨天的帖子:

好的,昨天我开始学习使用php的SSH/SFTP。我搜索了一堆论坛帖子,猜测我需要下载phpseclib

由于对php比较陌生,因此从php5开始,我不知道以前的php4没有使用___构造函数,因此出现了上述问题/帖子

回答相互矛盾,与原始问题有点偏离主题,但这让我想到了一个问题,我觉得在继续之前需要回答:

使用ssh2 pecl扩展或phpseclib扩展哪个更好


这个问题:是一样的,但我觉得现在有点过时了,就像11月5'10日17:37被问到的,我说的是phpseclib。就我个人而言,我认为phpseclib可以为您提供更好的支持,API也更好,但主观原因也更少:

更便携。

我试图在Ubuntu12.04上安装libssh2 php,“sudo apt get install libssh2 php”对我不起作用。即使它做到了,也很可能得不到最新版本。所以我不得不自己编译libssh2和PECL扩展,这总是一件麻烦事,很多管理员都不愿意做

即使你愿意编译东西,比如说你的硬盘出了故障,你必须重建服务器。如果你愿意编译libssh2,你可能也编译了其他东西。这意味着你不能仅仅启动另一个盒子——你必须记住你在旧盒子上所做的所有更改并重新应用它们。如果你不记得了呢?或者,如果其中一个没有更新以使用另一个的最新版本,该怎么办

相比之下,phpseclib不需要PHP以外的任何东西。如果它们可用,它将使用mcrypt、gmp、bcmath或openssl,但如果它们不可用,也可以。它甚至不需要PHP5,尽管它确实支持它

更好的公钥支持。

如何使用libssh2:

<?php
$ssh = ssh2_connect('domain.tld');
ssh2_auth_pubkey_file($ssh, 'username', '/home/ubuntu/pubkey', '/home/ubuntu/privkey'/*, 'password'*/);

$stream = ssh2_exec($ssh, 'ls -la');
echo stream_get_contents($stream);
25.71秒

phpseclib:

<?php
include('Net/SSH2.php');
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
$rsa->loadKey('...');

$ssh = new Net_SSH2('domain.tld');
$ssh->login('username', $rsa);
//$ssh->setPassword('password');

echo $ssh->exec('ls -la');
<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('domain.tld');
$sftp->login('username', 'password');

$start = microtime(true);
$sftp->put('1mb', str_repeat('a', 1024*1024));
$elapsed = microtime(true) - $start;

echo "took $elapsed seconds";

<?php
$ssh = ssh2_connect('domain.tld');
ssh2_auth_password($ssh, 'username', 'password');

$start = microtime(true);
$sftp = ssh2_sftp($ssh);

$fp = fopen('ssh2.sftp://'.$sftp.'/home/username/1mb', 'w');

fwrite($fp, str_repeat('a', 1024 * 1024));
$elapsed = microtime(true) - $start;

echo "took $elapsed seconds";
<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('domain.tld');
$sftp->login('username', 'password');

$start = microtime(true);
$sftp->put('1mb', str_repeat('a', 1024*1024));
$elapsed = microtime(true) - $start;

echo "took $elapsed seconds";