我已经从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*');
################################################################
?>
答案 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。