无法使用ssh2_scp_recv和ssh2_scp_send发送或接收文件

时间:2011-10-21 17:22:05

标签: php security ftp ssh file-transfer

不确定有什么问题,但我无法使用SSH发送或接收文件。

我正在使用以下代码

define('SSH_HOST', 'HOST');
define('SSH_USER', 'USER');
define('SSH_PASS', 'PASSWORD');
$connection = ssh2_connect(SSH_HOST, 22);
ssh2_auth_password($connection, SSH_USER, SSH_PASS); 

$remoteFile = '/remote/absolute/path/file.ext';
$localFile = '/local/absolute/path/file.ext';

if(ssh2_scp_recv($connection, $remoteFile, $localFile)){
    echo("received");
}else{
    echo("NOT received");
}

这个和file_get_contents功能都不起作用。 奇怪的是,我可以通过调用

来获取文件统计信息
$sftp = ssh2_sftp($connection);
$statinfo = ssh2_sftp_stat($sftp, $remoteFile);

但无法读取文件数据。

我是否需要在任一服务器上设置一些特殊权限?

2 个答案:

答案 0 :(得分:0)

SCP和SFTP是不同的东西。可能是SCP在您的服务器上被禁用。

答案 1 :(得分:0)

我会使用phpseclib, a pure PHP SFTP implementation。由于其日志记录功能,易于使用并更容易诊断问题。即

<?php
include('Net/SFTP.php');
define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

$ssh = new Net_SFTP('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

$ssh->put('filename.ext', 'zzzzzzzzzzzzzzz');
echo $ssh->getLog();
?>