SFTP Upload mit PHP

Seit einiger Zeit bietet PHP mit der SSH2-Library einige Methoden um das SFTP-Subsystem von SSH zu nutzen. Leider fehlt eine Methode um Dateien per SFTP hochzuladen. Zwar existiert mit der Methode ssh2_scp_send eine Möglichkeit Dateien über einer SSH-Verbindung hochzuladen, allerdings wird hier das SCP-Protokoll benutzt. Sollte der verwendete Account serverseitig jedoch auf SFTP beschränkt sein funktioniert diese Methode nicht. Um dennoch Dateien per SFTP hochladen zu können kann man sich mit der Methode fopen und dem ssh2-sftp Wrapper eine funktionierende Lösung basteln.

Eine sftp-upload Funktion könnte beispielsweise so aussehen:


public function sftp_putfile($local_file, $remote_file, $mode = 0664)
{
    $remote_file = (substr($remote_file, 0, 1) != '/') ? '/' . $remote_file : $remote_file;
    $sftp_stream = fopen('ssh2.sftp://' . $this->sftp_connection . $remote_file, 'w');

    if(!$sftp_stream)
    {
        $this->set_sftp_error(7);
        return false;
    }

    $data_to_send = file_get_contents($local_file);

    if ($data_to_send === false)
    {
        $this->set_sftp_error(7);
        return false;
    }

    if(fwrite($sftp_stream, $data_to_send) === false)
    {
        $this->set_sftp_error(7);
        return false;
    }
    fclose($sftp_stream);
    return true;
}

Diese beispielhafte Methode stammt aus einer SFTP Klasse die ich vor kurzem für eine Projekt geschrieben habe. Die komplette Klasse habe ich hier zum download hinterlegt.