PHP SFTP/SSH传输

问题描述:

前一段时间我发布了一个问题,但我询问了FTP,这是一个错误的问题(doh!)。我需要使用SFTP/SSH自动将图像(例如test.jpg)从一台服务器传输到另一台服务器。PHP SFTP/SSH传输

请问有人能解释我该怎么做?我对这种事情是完全陌生的,所以尽可能多的信息将会得到真正的赞赏。

感谢所有帮助

<?php 

$local_file = "http://localhost/ftptest/logo.png"; 
$remote_file = "/logo.png"; 

exec("scp $local_file username:[email protected]***.**.238.87:$remote_file"); 

?> 

编辑:

中我发现,这个工程结束

<?php 

    include('Net/SFTP.php'); 

    $image = 'logo.jpg'; //image to be uploaded - needs to be in the same directory as this script e.g. just logo.jpg 

    $image_contents = file_get_contents($image); // location of image to be uploaded 

    $sftp = new Net_SFTP('***.**.**.**'); // server address to connect to 
    if (!$sftp->login('***', '***')) { // server login details 
     exit('Login Failed'); 
    } 

    echo $sftp->pwd(); 
    $sftp->put($image, $image_contents); // upload a file $image with the image contents. 

?> 

无法获取SSH工作,但希望这将帮助别人在未来:)

由于在这里经常出现这种情况,您没有提供关于您试图实现的内容以及约束的更多信息。

图像来自哪里?它需要多快才能复制?服务器是否等同于集群中的节点?

由于两台服务器都已经在讲HTTP,为什么要使用不同的协议来传输内容?

由于安东尼奥建议你可以简单地执行scp - 但这只有在你设置了密钥对的情况下才能工作。

一个更灵活的解决方案(假设SSH是一个要求)将使用ssh bindings in PHP

+0

嗨symcbean,我看过这个,但我很努力去理解该怎么做。到目前为止,我已经下载了phpseclib文件并将它们放在与我的PHP脚本相同的目录中,然后添加了include('/ Net/SSH2.php');到脚本文件。我也下载了openssl,但我不知道该怎么做,请你解释一下吗?谢谢 –

+0

我做了phpinfo(),它说openssl已经启用。我得到的错误是'调用未定义的函数ssh2_connect()',这是否意味着我已经错误地安装了phpseclib文件? –

+0

这意味着你没有安装ssh2 PECL。 gettnig的使用方法取决于您使用的是哪个版本的PHP,您正在运行哪个操作系统以及从哪里获取PHP。 – symcbean

一个简单的方法来处理这个是打电话给PHP exec并执行unix scp调用。

exec("scp $local_file [email protected]:$remote_file"); 
+0

嗨安东尼奥,我已经更新了我的问题与我的代码,但它不会将图像传输到第二台服务器。难道我做错了什么? –

+1

Symcbean是正确的,我忘了提及您需要设置您的密钥对以验证scp。设置这样做会让我的答案更加复杂一些。看看symcbean的解决方案,这可能是更好的方法。 –

您可以尝试ssh2_scp_send

$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 

ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644);