Ich möchte eine Datei auf einen FTP-Server hochladen, aber der Dateiinhalt wird in einer Variablen gespeichert, nicht in einer tatsächlichen lokalen Datei. Ich möchte vermeiden, eine Datei zu verwenden; Dies dient der Vermeidung von Sicherheitsrisiken im Umgang mit sensiblen Daten auf einem (möglicherweise) nicht so sicheren System (*), sowie zur Minimierung des (ohnehin geringen) Overheads beim Dateihandling.Eine Datei auf die FTP-Site mit Inhalt aus einer String-Variablen setzen (keine lokale Datei)
Aber PHP FTP-API bietet nur Hochladen von Dateien aus lokalen Dateien über die Funktion ftp_put
oder (wenn die Datei bereits als Datei-Handle geöffnet ist) ftp_fput
.
Derzeit verwende ich diese Funktion mit einer temporären Datei, in der ich den Inhalt vor dem Upload schreiben:
$tmpfile = tmpfile();
fwrite($tmpfile, $content);
fseek($tmpfile, 0);
ftp_fput($ftp, $filename, $tmpfile, FTP_BINARY);
Gibt es einen einfacheren Weg, ohne Dateien auf der lokalen (PHP) Website überhaupt mit?
Es gibt ftp_raw
, die verwendet werden können, beliebige Befehle zu senden, so kann ich manuell den PUT
Befehl ausgeben, aber ich sehe nicht, einen Weg, um die Daten manuell auf dem Datenkanal zu schreiben ...
Ich weiß nicht, ob es wichtig ist, aber die FTP-Verbindung ist mit SSL gesichert (ftp_ssl_connect
).
(*) Betrachten Sie das Szenario, in dem ein Angreifer read-only hat die Kontrolle über das gesamte Dateisystem.
Warum ist das nicht die ultimative Lösung, ist dies, weil es ist eine Art von Hacky, oder weil dies schafft Risiken? – Martijn
@Martijn Nun, für mich klingt es einfach hacky - keine Sicherheitsbedenken. Ich war auf der Suche nach etwas wie 'ftp_puts' (put Daten von einem String-Argument), das scheint nicht zu existieren. Im Allgemeinen erlaubt das Protokoll "wrapper" API von PHP, solche fehlenden API Funktionalität zu umgehen, die hacky zu mir scheint, aber scheint, die "normale" Weise zu sein, etwas mit "imaginären" Dateien zu tun, wenn eine andere API nur Handhabung von Akten anbietet wie die FTP-API. Jemand könnte es elegant finden, jemand anderes findet es hacky. ;) – leemes