input type="file" Problem

blount

Erfahrenes Mitglied
Hallo zusammen,

es geht um ein Ftp upload Formular,
mit dem man Dateien von seinem Rechner
auf einen Server laden können sollte.

Mein Problem stellt sich wie folgt dar:
Die Variable in die der Inhalt des "file"
Feldes übergeben wird, liefert keinen
gesamten Pfad, sondern nur den
Dateinamen.

Dann habe ich in den Form tag folgende
Angabe mit hineingeschrieben:
enctype="multipart/form-data"

Dann spuckt der mir für die Variable aber
so ein komisches kauderwelch aus:
C:\DOKUME~1\ADMIN~1.BLO\LOKALE~1\Temp\php81.tmp
Der Pfad hat nichts mit der ausgewählten
Datei gemeinsam!

hier die daten:
PHP:
<html>
<body>
<form enctype="multipart/form-data" action="test.php" method="post">
	<input type="file" size="30" name="local_file"><br>
	<input type="submit" value="upload">
</form>
</body>
</html>

<?
if ($local_file){
	put_file($local_file);
}

function put_file($local_file){
	$my_user = "user";
	$my_pw = "pw";
	$my_host = "meinhost";
	$remote_file=basename($local_file);
	$ftp = ftp_connect($my_host);
	if(!$ftp){
		echo "keine verbindung zum host".$my_host;
	} else {
		$res = ftp_login($ftp, $my_user, $my_pw);
		if (!$res){
			echo "login nicht möglich";
		} else {
			echo "login bei host ".$my_host." erfolgreich!";
			
			echo "<br>Local: ".$local_file;
			echo "<br>Remote: ".$remote_file;
		}
		ftp_put ($ftp, $local_file, $remote_file, FTP_BINARY);
		if (!$contents = ftp_nlist($ftp,"./")){
			echo "verzeichnis ungültig oder nicht lesbar!";
		} else {
			echo "<br><b>verzeichnisinhalt: </b><br>";
			foreach ($contents as $var){
				echo $var."<br>";
			}
		}
		ftp_quit($ftp);
	}
}
?>
Wenn der komplette Pfad vom "file" Feld
zurückgegeben würde, würde alles problemlos
funktionieren, vielleicht habt ihr ja eine Ahnung
wo der Fehler liegt.


pl reply
 
Hallo blound,

also wie ich das sehe, behandelst Du das File wie einen String. Ist aber ein File.
Ich nehme mal an, Du hast einen Windows-Server, wo IIS oder APACHE und PHP darauf läuft.
Dieses Kauderwelsch ('C:\DOKUME~1\ADMIN~1.BLO\LOKALE~1\Temp\php81.tmp') ist die 8.3 - Schreibweise, weil Dein PHP anscheinend keine langen Dateinamen unterstützt - zumindest beim Upload.

Mein Vorschag : Lege eine 2. PHP-Datei an und lasse das Form darauf zeigen. In der 2. Datei verarbeite ohne Funktion die Datei weiter (also FTP-Upload). Ich weiß es nicht genau, aber ich nehme an, dass PHP durch die Funktion und den Parameter die Datei in einen String wandelt. Leider wandelt PHP die Datentypen automatisch um.

Keine Ahnung ob es das ist, aber ein Versuch ist es wert.

Noch ein Tipp am Rande : Mach' Dir einen kleinen 2. Rechner fertig auf dem Du Linux und Apache mit PHP und MySQL laufen hast, dann kommen solche Probleme wie 'C:\DOKUME~1\ADMIN~1.BLO\LOKALE~1\Temp\php81.tmp' erst gar nicht auf). ;)

Asterix :)
 
Danke für deine Antwort AsterixAoH,

doch leider besteht das Problem immer noch.
wenn ich statt input type="file" => input type="text"
nehme und dann den Pfad zur Datei von Hand
eintrage funktioniert alles perfekt.

Es sieht fast so aus als gäbe das Dateifeld type="file"
einfach keinen korrekten Pfad zurück und das darin
der Fehler liegt.

Aber leider weiss ich nicht wie sich das beheben ließe!


//Edit:
Das Problem hat sich erledigt sobald ich die .php datei
auf den externen Server hochgeladen hatte. Hing
wahrscheinlich mit der lokalen Entwicklungsumgebung
zusammen. (Habe das Script aus der Tutorial Sektion
genommen LINK )
 
Zuletzt bearbeitet:
Zurück