Tach!
throw new \Exception("Could not connect to $host on port $port");
Hm. Was soll der \ da?
Der ist korrekt und eine Namespace-Angabe.
$remote_file_path = "/"; $stream = fopen("ssh2.sftp://".(int)$sftp.$remote_file_path, 'r');
Was erwartest Du hier? $sftp ist eine resource. Das String-verknüpfst Du mit "/". Und castest das als Integer, was bestenfalls sowas wie "ssh2.sftp://42" ergäbe. Oder bindet der Cast stärker? Dann ergäbe das "ssh2.sftp://42/".
Der Typecast ist stärker als die Stringverknüpfung. Dass man da eine Ressource einbinden soll, steht so im PHP-Handbuch, auch wenn das ungewöhnlich ist. Der Typecast zu int ist allerdings auf einen Kommentar zurückzuführen.
fopen erwartet einen Dateinamen oder eine URL (falls das für die URL überhaupt freigeschaltet ist).
Du hast hier die URL-Variante mit Protokoll ssh2.sftp gewählt - gibst dann aber anstelle des Hostnames in der URL eine Nummer (in obigen Beispielen hab ich mal die 42 gewählt) an.
Und das soll funktionieren?
Ja, laut Handbuch. Die eigentliche Server-Verbindung wurde ja bereits im vorangehenden ssh_connect()-Aufruf erledigt.
Müßte nach
$sftp = ssh2_sftp($connection);
nicht ein
ssh2_scp_recv()
oderssh2_scp_send()
oder sowas in der Art kommen?
Nicht unbedingt, denn das wäre kein SFTP sondern ein SCP. Also ein Unterschied wie zwischen FTP und copy bzw. cp. (S)FTP kann deutlich mehr als nur Dateien übertragen, beispielsweise Verzeichnisse anlegen oder Dateien löschen.
dedlfix.