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


How do I make this script copy files to local disk?

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

在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*');
 ################################################################
?>

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

目前还不清楚你期望会发生什么。除非文件名/actly/中有通配符,否则您是否希望它下载以 gateway_data* 开头的每个文件并在输出中将它们连接起来?就个人而言,我认为仅返回 false 或 NULL 会比这更好。

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

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

请参阅如何使用 SFTPConnection 发送包含 SFTP 的文件的示例。