2010-10-15 16 views
22

Ich versuche, eine Dokumentdatei aus einem Formular hochzuladen und an eine E-Mail zu senden. Ich bin mit

$_FILES['file']['tmp_name']; 

Das Problem ist, es eine zufällig generierte Dateinamen zurückgibt. Also, wenn es den Posteingang erreicht, ist der Dateiname phpvwRGKN.dat (der Dateiname ist jedes Mal zufällig).

Wie kann ich den Dateinamen und die Erweiterung beibehalten?

Hinweis: Ich bin mit geekMail class

+20

dude print_r ($ _ FILES); – rook

Antwort

10

$_FILES["file"]["name"] - the name of the uploaded file

von http://www.w3schools.com/php/php_file_upload.asp

+0

Wenn ich $ _FILES ["file"] ["name"] verwende und es einer Variablen, zB $ attachment, zuweise, dann funktioniert das nicht, weil nur ein Dateiname zurückgegeben wird. Ich denke, ich muss den Pfad angeben und Pfad kann nur aus tmp_name kommen. Bitte korrigieren Sie mich, wenn ich falsch liege. – Jaspero

+2

Die meisten Mail-Bibliotheken haben zwei Dateinamen, die Sie für Anhänge verwenden. Einer ist der Name/Ort der Datei auf dem Server, der andere ist der Name, wie der Benutzer es sehen soll. In Ihrem Fall lautet der Name/Speicherort "tmp_name" und der Endbenutzerdateiname lautet "name". –

+1

Aus Ihrer Frage verstehe ich, dass Sie die Datei auf dem Server speichern möchten, indem Sie den Namen anstelle von tmp_name verwenden. Die Sache zu tun ist, http: // php zu verwenden.net/manual/de/function.move-uploaded-file.php 'move_uploaded_file()' und verschiebe die 'tmp_file' in den permanenten Pfad mit' name' Dateiname. –

47

$_FILES['file']['tmp_name']; wird die temporäre Datei Name der Datei auf dem Server enthalten. Dies ist nur ein Platzhalter auf Ihrem Server, bis Sie die Datei verarbeiten

$_FILES['file']['name']; enthält den ursprünglichen Namen der hochgeladenen Datei vom Computer des Benutzers.

+0

$ geekMail-> attach ('/ home/willem/file2.zip') sollte das Format für die Verwendung der Bibliothek sein. Also musste ich verwenden $ attachment = $ _FILES ['file'] ['tmp_name']; $ GeekMail-> attach ($ Anhang); Gibt es einen Weg, wie ich ['Name'] auch mit dem Pfad übergeben kann? – Jaspero

+0

Wenn Sie ein IMG mit einem src von tmp_name erstellen, was passiert? – Marcel

+2

Danke für die Erklärung! Konnte diese Informationen nirgends im Internet finden – JMS

0

Nur ein Vorschlag, aber Sie könnten stattdessen die Birne Mail_Mime Klasse versuchen.

http://pear.php.net/package/Mail_Mime/docs

Ansonsten können Sie ein Stück Code verwenden. Die Methode von Gabi Purcaru, rename() zu verwenden, funktioniert nicht so, wie sie geschrieben wurde. Sieh diesen Beitrag http://us3.php.net/manual/en/function.rename.php#97347. Sie werden so etwas wie dieses benötigen:

$dir = dirname($_FILES["file"]["tmp_name"]); 
$destination = $dir . DIRECTORY_SEPARATOR . $_FILES["file"]["name"]; 
rename($_FILES["file"]["tmp_name"], $destination); 
$geekMail->attach($destination); 
1

Wie @Gabi Purcaru erwähnt oben, um die richtige Art und Weise die Datei zu umbenennen und zu verschieben ist move_uploaded_file() zu verwenden. Es führt einige Sicherheitsprüfungen durch, um Sicherheitslücken und andere Exploits zu verhindern. Sie müssen den Wert $_FILES['file']['name'] bereinigen, wenn Sie ihn oder eine davon abgeleitete Erweiterung verwenden möchten. Verwenden Sie pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION), um die Erweiterung sicher zu erhalten.

1

Wenn Sie die hochgeladene Datei Namen will erhalten, verwenden $_FILES["file"]["name"]

Aber Wenn Sie die hochgeladene Datei lesen wanna sollten Sie $_FILES["file"]["tmp_name"] verwenden, da tmp_name eine temporäre Kopie der hochgeladenen Datei ist und es ist einfacher als mit

$_FILES["file"]["name"] // This name includes a file path, which makes file read process more complex

4

$_FILES["file"]["tmp_name"] enthält die aktuelle Kopie der Datei-Inhalt auf dem Server während
$_FILES["file"]["name"] den Namen der Datei enthält, die Sie aus dem clien hochgeladen t Computer.

Verwandte Themen