Wie man SFTP Upload von Dateien von PHP
Frage
Ich habe Probleme PHP SFTP-Upload-Dateien auf einen Remote-Server zu verwenden. Als ich cURL verwenden, erhalte ich die Fehler hier beschrieben:
SFTP von PHP - undefinierter Konstante CURLOPT_PROTOCOLS und CURLPROTO_SFTP
I phpseclib auch versucht, wie vorgeschlagen in:
Aber wenn ich phpseclib versuchen, erhalte 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, mit Systembefehlen in php wie so, aber nichts geschah:
<?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 nicht definiert ist.
Ich habe versucht, die folgenden von der Klemme
zu tunscp file.csv user@ftp.remote.com
password
Aber der Server erlaubt keine scp Befehl. Ich habe keinen Shell-Zugriff SSH-Schlüssel zu erstellen.
Alles, was ich jetzt tun kann, ist, SFTP von Terminal und manuell hochladen. Aber ich möchte wirklich, dies zu automatisieren, um eine PHP-Website all dies tun können.
Es gibt nicht viele Anleitungen, wie SFTP-Upload von PHP. Ist es, weil es eine schlechte Sache zu tun ist? Wenn ja, was soll ich tun? Der Server möchte ich hochladen können nur SFTP-Verbindungen.
Lösung
http://phpseclib.sourceforge.net/documentation/intro.html#intro_usage_correct
Per dass phpseclib Stammverzeichnis muss in include_path sein. Von dieser Seite:
<?php
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SFTP.php');
?>
Sie sollten wirklich machen Sie sich mit dieser Art von Technik umfassen -. Es ist ziemlich Standard für die PEAR-Bibliotheken und Zend diejenigen
Andere Tipps
aber mein PHP-Server sagt ss2_connect nicht definiert ist.
Für diesen Fehler sollten Sie ssh2 Erweiterung installieren auf Ihrem Server-PHP.
Verwenden Sie die in SSH-Bibliothek gebaut. die scp-Funktion wird einfacher als eine SFTP-Sitzung zu initiieren.
Um die Verwendung system
Befehl müssen Sie:
- Konfigurieren kennwort weniger ssh
- Ausführen-Befehl wie
scp filename1 userid@hostname:filename2
, Scheckman scp
. Sie können das gleiche mitsftp
tun, aber mit einigen anderen Optionen
Sie können Pure-PHP Implementierung von SSHv2 Bibliothek verwenden.
Hier sind einige Beispiele dafür, wie diese Bibliothek verwenden:
<?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");
?>