如何使此脚本将文件复制到本地磁盘?

时间:2014-12-11 08:31:27

标签: php sftp phpseclib

我已经从SO帖子中复制并尝试了许多PHP脚本。我试图从运行Centos的服务器下载文件。通过psftp(putty)我可以手动登录并复制文件。但是我希望自动化这个过程,因此需要一个脚本。

在Windows上运行的类似服务器上,可以通过简单的Perl脚本通过ftp下载文件。在Centos服务器上,我使用Perl脚本拒绝连接。所以我尝试了几个PHP脚本。下面的脚本(来自SO帖子)是否适合这份工作?或脚本有什么问题?

脚本1

#!/usr/bin/php
<?php
include('Net/SSH2.php');
$sftp = new Net_SFTP('xx.xx.xxx.xxx');
if (!$sftp->login('myuser', 'mypasswd')) {
    exit('Login Failed');
}

// outputs the contents of filename.remote to the screen
echo $sftp->get('gateway_data*');
?>

脚本2

#!/usr/bin/php
<?php
include('Net/SSH2.php');

username='myuser';
password='mypasswd';
// Create SCP connection using a username and password
$scp = new SCP(
    'xx.xx.xxx.xxx',
    new SSH2Password($username, $password)
);

#################################
$sftp = ssh2_sftp($conn);

// Create a new local folder
ssh2_sftp_mkdir($sftp, './data');

// Retrieve a list of files
$files = scandir('ssh2.sftp://' . $sftp . '/data/gateway_data*');
 ################################################################
?>

2 个答案:

答案 0 :(得分:0)

在第一个PHP脚本中,您发布了正在执行的echo $sftp->get('gateway_data*');,而在Perl脚本中,您正在执行cp gateway_data_301.txt。尝试在PHP脚本中执行此操作。例如。 echo $sftp->get('gateway_data_301.txt');

目前还不清楚你期待发生什么。除非文件名/实际上/其中有一个外卡,你是否希望它下载每个以gateway_data *开头的文件并只在输出中连接它们?就个人而言,我认为只返回false或NULL会比这更好。

答案 1 :(得分:-1)

您可以在PHP中使用脚本2。但是那里缺少一些东西。您只是打开源目录。您必须在该文件夹中的所有文件上写一个循环。

  // Retrieve a list of files
  $files = scandir('ssh2.sftp://' . $sftp . '/data/gateway_data*');
  foreach ($files as $key => $value) {

使用SFTPConnection查看example of how to send a file with SFTP