Как мне сделать этот скрипт копировать файлы на локальный диск?

Я скопировал и попробовал много скриптов PHP из SO сообщений. Я пытаюсь загрузить файлы с сервера под управлением Centos. Через psftp (putty) я могу войти в систему вручную и копировать файлы. Но я хочу автоматизировать процесс, поэтому мне нужен сценарий.

На аналогичном сервере, работающем в Windows, я могу загружать файлы по ftp через простой Perl-скрипт. На сервере 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

Решение

В первом скрипте PHP, который вы опубликовали, вы делаете echo $sftp->get('gateway_data*'); тогда как в сценарии Perl вы делаете cp gateway_data_301.txt, Попробуйте сделать это в скрипте PHP. например. echo $sftp->get('gateway_data_301.txt');,

Как это неясно, что вы ожидаете, чтобы произойти. Если имя файла / на самом деле / ​​не содержит подстановочный знак, ожидаете ли вы, что оно загрузит каждый файл, начинающийся с gateway_data *, и просто объединит их в выводе? Лично я думаю, что просто возвращение false или NULL было бы лучше, чем это.

0

Другие решения

Вы можете использовать свой сценарий 2 в PHP. Однако чего-то там не хватает. Вы только открываете исходный каталог. Вы должны написать цикл над всеми файлами в этой папке.

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

Увидеть пример того, как отправить файл с SFTP используя SFTPConnection.

-1

По вопросам рекламы [email protected]