Добавить удаленную функцию загрузки SFTP в сгенерированный CSV-файл через PHP [duplicate]

Прототип или Object.prototype - это свойство литерала объекта. Он представляет объект прототипа Object , который вы можете переопределить, чтобы добавить дополнительные свойства или методы дальше по цепочке прототипов.

__ proto__ является свойством accessor (функция get и set), которая предоставляет внутренний прототип объекта, к которому он обращается.

Ссылки:

  1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype
  2. http://www.w3schools.com/js/js_object_prototypes.asp
  3. https://developer.mozilla.org/en-US/docs/Web/JavaScript / Reference / Global_Objects / Object / proto

28
задан Erik Ekman 5 March 2012 в 21:30
поделиться

5 ответов

С помощью метода выше (с участием sftp) вы можете использовать stream_copy_to_stream :

$resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, 'w');
$srcFile = fopen("/home/myusername/".$csv_filename, 'r');
$writtenBytes = stream_copy_to_stream($srcFile, $resFile);
fclose($resFile);
fclose($srcFile);

Вы также можете попробовать использовать ssh2_scp_send

39
ответ дан dev-null-dweller 22 August 2018 в 02:22
поделиться
  • 1
  • 2
    Это потрясающе, но не забудьте отключить открытый базовый каталог для пользователя. – Burak Öztürk 18 July 2016 в 23:28

Для меня это сработало:

$connection = ssh2_connect($server, $serverPort);

if(ssh2_auth_password($connection, $serverUser, $serverPassword)){
    echo "connected\n";
    ssh2_scp_send($connection, "/path/to/local/".$file, "/path/to/remote/".$file);
    echo "done\n";
} else {
    echo "connection failed\n";
}

Сначала мне нужно было установить libssh2-php:

sudo apt-get install libssh2-php
10
ответ дан Matthias 22 August 2018 в 02:22
поделиться
  • 1
    спасибо за apt-get install libssh2-php – Ariful Haque 16 March 2016 в 16:32
  • 2
    Я получил Пакет libssh2-php недоступен, поэтому используйте sudo apt-get install php-ssh2 вместо – omega1 16 February 2018 в 14:35

Лично я предпочитаю избегать расширения PECL SSH2. Мой предпочтительный подход включает phpseclib, чистую реализацию PHP SFTP . например,

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

$sftp->put('remote.ext', 'local.ext', NET_SFTP_LOCAL_FILE);
?>

. Одна из больших вещей, которые мне нравятся в phpseclib над расширением PECL, заключается в том, что она переносима. Возможно, расширение PECL работает с одной версией Linux, но не с другим. И на общих хоста он почти никогда не работает, потому что он почти никогда не установлен.

phpseclib также, на удивление, быстрее . И если вам нужно подтвердить, что загруженный файл вы можете использовать встроенный протокол phpseclib в качестве доказательства.

19
ответ дан neubert 22 August 2018 в 02:22
поделиться
  • 1
    Я загружаю некоторые файлы csv, используя вышеприведенный скрипт, но я получаю следующую ошибку: максимальное время выполнения 120 секунд превышено в Net \ SSH2.php в строке 3521, как я могу его превысить. – Anand Mishra 23 September 2015 в 12:43
  • 2

Разделяя дополнительные входы, найденный ssh2_scp_send не копировался должным образом (байты были разными), когда копирование файла из Linux (64-разрядного) в Windows (32 бит), там работала sftp. При использовании Windows с stfp путь в случае C: \ to \ path должен быть помещен как ssh2.sftp: // {$ resSFTP} / cygdrive / c / to / path, если Cygwin используется для SSH в окне Windows .

1
ответ дан pradosh nair 22 August 2018 в 02:22
поделиться

Для простого документа phpseclib, чистой реализации PHP SFTP.

См. следующую ссылку:

Загрузка файлов через SFTP с использованием PHP

Структура папок:

Main Folder->
    my-files(Contain File Which Transfer To Remote Server)
    phpseclib0.3.0
    sftp.php
4
ответ дан Sandesh 22 August 2018 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: