Bilder upload via PHP

DexXxtrin

Erfahrenes Mitglied
Hallo zusammen,

Ich hab mal ein Script geschrieben, welche über FTP ein Bild auf den Server lädt.
Damit ich es gleich am richtigen Ort habe, hat der FTP-Account gleich Pfad als root-Verzeichnis.

Das Uploaden funktioniert auch wunderbar soweit.
Allerdings wird in das Verzeichnis, in welchem php-Datei fürs Upload ist immer eine leere Kopie des hochgeladenen Bildes erstellt.
Was mach ich da falsch? Eigentlich sollte mit diesem FTP-Account ja gar kein Zugriff bestehen auf dieses Verzeichnis...!?


Code:
root
|-img
    |-fotos
       |-Bild hier rein
|-admin
   |-Script hier
 
Hi,

jetzt wäre natürlich gut zu wissen, wie das Script aussieht. Wie das mit dem Dateiupload allgemein funktioniert, kannst du hier nachlesen. Die Methode auf der angegebenen Seite hat auch nichts mit FTP-Rechten zu tun.

Best regards
 
So das ist mein PHP-Upload.

Wieso ist für einen Upload kein FTP notwendig? Welche Variante ist zu bevorzugen?


PHP:
$host = "xxxx";
	$user = "xxxx";
	$password = "xxxxxxxx";

	$connection_id = ftp_connect($host);
	$login_result = ftp_login($connection_id, $user, $password);

	if (!$connection_id || !$login_result) {
		echo '<p class="directlinkwarning"><strong>Konnte keine Verbingung zum Server hergestellt werden</strong></p>';
	}
	else{
		$remote_filename = $_FILES["filename"]["name"];
		$local_filename = $_FILES["filename"]["tmp_name"];
		$content = "Uploaded at ".date('Y-m-d H:i:s');

		file_put_contents($remote_filename,$content);

		$upload = ftp_put($connection_id, $remote_filename, $local_filename, FTP_BINARY);

		if (!$upload)
		{
		echo '<p class="directlinkwarning"><strong>Upload fehlgeschlagen</strong></p>';
		}
	}
	ftp_quit($connection_id);
 
Der Upload geschieht über das HTTP-Protokoll. Im Link in meinem ersten Beitrag ist diese Methode beschrieben.

$_FILES["filename"]["tmp_name"] ist demnach auch ein Pfad auf deinem Server (zum PHP-Tempverzeichnis). Du kannst also die Datei simpel von deinem Tempverzeichnis in das Zielverzeichnis kopieren (geschieht im Beispiel mittels move_uploaded_file()). Dein "remote_filename" beinhaltet übrigens den originalen Namen der Datei, keinen Pfad oder ähnliches. Aber das steht auch alles in dem Artikel.

Falls noch Fragen dazu bestehen, immer her damit. ;)

Best regards
 
Na gut, das war nicht ganz die Frage. ;)

Der Upload funktioniert, das Bild landet schlussendlich im richtigen Verzeichnis. (ftp Account hat zugrif auf ./img/fotos -; dort sollte und ist das Bild schlussendlich auch.)
Die PHP-Datei befindet sich in ./adm
Wenn ich jetzt ein Bild "beispiel.jpg" hochlade, habe ich das schlussendlich unter ./img/fotos/beispiel.jpg.
Allerdings auch unter ./adm/beispiel.jpg. Dies ist Allerdings nur 1kB gross und keine gültige Datei.

Ich habe ja die FTP-Uploadvariante gewählt!? Somit hat das, wenn ich das richtig sehe, nichts mit der von dir geposteten Variante zu tun!?
Oder habe ich da etwas durcheinander gebracht?

PS: Ja das Script ist noch nicht fertig (diverse Prüfungen von Dateityp, Grösse, usw. fehlen - geht aber mal um den Upload)
 
Achso, ich verstehe. Das wird vermutlich am file_put_contents() liegen. Der legt im Scriptverzeichnis eine Datei mit dem Namen $_FILES["filename"]["remote_name"] an (z.B. beispiel.jpg) und schreibt $content da rein. Schau dir mal die Datei mal mit einem Editor an. Da steht sicher sowas wie "Uploaded at xxxx-xx-xx xx:xx:xx" drin.

Das mag funktionieren, trotzdem ist es nicht sinnvoll hier mit FTP zu arbeiten. FTP ist aber dazu da, Dateien zwischen zwei Rechnern zu transferieren. Die Dateien sind ja schon auf deinem Server, der Transfer ist zu diesem Zeitpunkt schon längst geschehen. Es geht, wie in dem oben verlinkten Artikel beschrieben, auch viel einfacher.
 
Der Inhalt stimmt. :)

Hab mir auch gedacht, dass die von dir gepostete Variante ja viel einfacher ist... Werde es wohl so machen.

Allerdings habe ich noch eine letzte Frage. Ich kann dir nicht ganz folgen mit der Aussage "der Transfer ist zu diesem Zeitpunkt schon längst geschehen". Zu welchem Zeitpunkt meinst du? Das Bild soll ja von meinem Rechner auf den Server transferiert werden... o.O
 
Zu dem Zeitpunkt, an dem das Script läuft (jedenfalls interpretiere ich das momentan so). Du greifst jedenfalls auf die $_FILES-Variable zu, und die hat n ur Referenzen zu Verzeichnissen auf dem Server und beinhaltet auch den originalen Dateinamen (aber keinen Pfad zu deinem lokalen Verzeichnis).

Vermutlich hast du diesem Script ein Formular vorgeschaltet, das ähnlich aufgebaut ist, wie das in dem Beispiel in dem Artikel oben. Sobald du das abschickst, wird die Datei in das PHP-Tempverzeichnis hochgeladen und ist dann auf deinem Server. Dann wird dein Script ausgeführt.
 
Das erkärt natürlich vieles.
Somit wird die Datei bereits mit dem Formular hochgeladen und das ganze FTP Zeugs ist total überflüssig. Das einzige was eigentlich noch zu tun wäre, ist die Datei ins richtige Verzeichnis zu verschieben.
Die Upload Sache wird ja immer einfacher und verständlicher. :)

Vielen Dank für deine Hilfe und Auskünfte!

Gruss DeXxXtrin
 
Zurück