Я скопировал и попробовал много скриптов 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*');
################################################################
?>
В первом скрипте PHP, который вы опубликовали, вы делаете echo $sftp->get('gateway_data*');
тогда как в сценарии Perl вы делаете cp gateway_data_301.txt
, Попробуйте сделать это в скрипте PHP. например. echo $sftp->get('gateway_data_301.txt');
,
Как это неясно, что вы ожидаете, чтобы произойти. Если имя файла / на самом деле / не содержит подстановочный знак, ожидаете ли вы, что оно загрузит каждый файл, начинающийся с gateway_data *, и просто объединит их в выводе? Лично я думаю, что просто возвращение false или NULL было бы лучше, чем это.
Вы можете использовать свой сценарий 2 в PHP. Однако чего-то там не хватает. Вы только открываете исходный каталог. Вы должны написать цикл над всеми файлами в этой папке.
// Retrieve a list of files
$files = scandir('ssh2.sftp://' . $sftp . '/data/gateway_data*');
foreach ($files as $key => $value) {
Увидеть пример того, как отправить файл с SFTP используя SFTPConnection.