4 Stimmen

SFTP-Upload von Dateien aus PHP

Ich habe Probleme mit PHP, um Dateien per SFTP auf einen entfernten Server hochzuladen. Wenn ich cURL verwende, erhalte ich den hier beschriebenen Fehler:

SFTP von PHP - undefinierte Konstanten CURLOPT_PROTOCOLS und CURLPROTO_SFTP?

Ich habe auch phpseclib ausprobiert, wie in vorgeschlagen:

SFTP aus PHP heraus

Aber wenn ich phpseclib ausprobiere, bekomme ich diese Fehler:

Warning: require_once(Math/BigInteger.php) [function.require-once]: failed to open stream: No such file or directory in /home/john/public_html/test/Net/SSH2.php on line 53

Fatal error: require_once() [function.require]: Failed opening required 'Math/BigInteger.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/john/public_html/test/Net/SSH2.php on line 53

Ich habe dann versucht, Systembefehle in php zu verwenden, aber es passierte nichts:

<?php
echo system('sftp user@ftp.domain.com');
echo system('password');
echo system('put file.csv');
?>

Ich habe auch versucht

<?php
$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');

ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644);
?>

aber mein php-Server sagt ss2_connect ist nicht definiert.

Ich habe versucht, im Terminal folgendes zu tun

scp file.csv user@ftp.remote.com
password

Aber der Server lässt den Befehl scp nicht zu. Ich habe keinen Shell-Zugang, um ssh-Schlüssel zu erstellen.

Alles, was ich im Moment tun kann, ist sftp vom Terminal aus und manuelles Hochladen. Aber ich möchte wirklich, dies zu automatisieren, so dass eine PHP-Website all dies tun kann.

Es gibt nicht viele Anleitungen für den SFTP-Upload mit PHP. Liegt es daran, dass es eine schlechte Sache ist? Wenn ja, was sollte ich dann tun? Der Server, auf den ich hochladen möchte, lässt nur SFTP-Verbindungen zu.

6voto

dreamafter Punkte 172

http://phpseclib.sourceforge.net/documentation/intro.html#intro_usage_correct

Dazu muss das Root-Verzeichnis von phpseclib in Ihrem include_path liegen. Von dieser Seite:

<?php
  set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');

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

Sie sollten sich wirklich mit dieser Art von Include-Technik vertraut machen - sie ist ein ziemlicher Standard für PEAR- und Zend-Bibliotheken.

1voto

aber mein php-Server sagt ss2_connect ist nicht definiert.

Um diesen Fehler zu beheben, sollten Sie die ssh2-Erweiterung auf Ihrem Server installieren.

0voto

Byron Whitlock Punkte 51063

Verwenden Sie die eingebaute SSH-Bibliothek. Die Verwendung der scp-Funktion ist einfacher als das Starten einer sftp-Sitzung.

http://www.php.net/manual/en/function.ssh2-scp-send.php

0 Stimmen

Der Server, an dem ich arbeite, sagt, dass ssh2_connect() nicht definiert ist. Außerdem erlaubte mir der entfernte Host, mit dem ich mich verbinde, nicht, file.csv user@remote.server.com zu scpen.

1 Stimmen

Diese Funktion ist wahrscheinlich nicht standardmäßig verfügbar. Sie benötigen die PECL ssh2 Erweiterung mit libssh2.

0voto

Elalfer Punkte 5186

Zur Verwendung system Befehl müssen Sie:

  1. ssh ohne Passwort konfigurieren
  2. Befehl ausführen wie scp filename1 userid@hostname:filename2 , prüfen man scp . Das Gleiche können Sie tun mit sftp aber mit einigen anderen Optionen

0voto

Sie können die Pure-PHP-Implementierung der SSHv2-Bibliothek verwenden.

Hier sind einige Beispiele für die Verwendung dieser Bibliothek:

<?php
include 'vendor/autoload.php';
$ssh = new \phpseclib\Net\SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}
echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>

Und:

<?php
include 'vendor/autoload.php';
$key = new \phpseclib\Crypt\RSA();
//$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));
$ssh = new \phpseclib\Net\SSH2('www.domain.tld');
if (!$ssh->login('username', $key)) {
    exit('Login Failed');
}
echo $ssh->read('username@username:~$');
$ssh->write("ls -la\n");
?>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X