2009-07-22 27 views
0

1.Hi, ich habe eine interne Verwendung nur Datei-Upload-Skript, das die Dateien in ein Verzeichnis hochlädt. Wenn ich etwas von meinem Computer mit einem spcace in den Namen z. B. 1.zip hochlade, wird mit einem Leerzeichen im Namen hochgeladen, wodurch der Link in einer E-Mail gelöscht wird. Ist es möglich, Apache den Space zu entfernen, wenn es hochgeladen wird oder es zu einem Unterstrich macht?Entfernen Sie Leerzeichen in Dateinamen Apache

Das zweite Problem, das ich habe, ist, wie würde ich dies analysieren, um den Link eine E-Mail-Link mit der URL der Datei als der Körper der E-Mail und die E-Mail-Addy etwas?

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $_FILES['file']['name'])) { 
    // uploaded file was moved and renamed succesfuly. Display a message. 
    echo "Link: " . "http://example.org/" . $_FILES["file"]["name"]; 

Antwort

7

Sie müssen nur Ihre Dateinamen urlencode() und alles ist in Ordnung:

echo "Link: http://example.org/" . urlencode($_FILES["file"]["name"]); 

Aber wenn Sie die Räume aus einem anderen Grund entfernen möchten, können Sie str_replace():

$replaced_name = str_replace(' ', '_', $_FILES["file"]["name"]); 
rename($uploaddir . '/' . $_FILES['file']['name'], $uploaddir . '/' . $replaced_name); 
# You should urlencode() it nonetheless: 
echo "Link: http://example.org/" . urlencode($replaced_name); 
+0

Wie würde ich es machen, damit ich diesen Link als mailto verwenden könnte, wie der Link auf dem Körper gehen würde und alles würde in der Nachricht sein – hnhh

+0

Werfen Sie einen Blick auf den Abschnitt Beispiele der entsprechenden RFC: http: // Tools .ietf.org/html/rfc2368 # section-6 – soulmerge

+0

danke groß seine wirklich hilfreich –

1

Versuchen:

$filename = $_FILES['file']['name']; 
$filename = preg_replace("/[^a-zA-Z0-9]/", "", $filename); 

//then 
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $filename)) { 

// uploaded file was moved and renamed succesfuly. Display a message. 
echo "Link: " . "http://example.org/" . $filename; 
+0

Danke! jede Idee, wie ich eine E-Mail wie eine Sache machen würde – hnhh

+0

Sie möchten diesen Link für eine E-Mail senden? – Nathan

+0

Grundsätzlich möchte ich eine mailto: [email protected] mit dem Body-Text auf den Link Echo. – hnhh

1

Als eine Randnotiz: Was passiert mit dem Code, den Sie verwenden, wenn zwei Dateien mit demselben Namen hochgeladen werden? Wenn Sie keine Überprüfung durchführen (wie "gibt es eine Datei, die diesen Namen bereits in $uploaddir hat?") wird die zweite Datei die erste Datei ersetzen.

Das könnte nicht etwas sein, das du willst ... oder?

Falls nicht, dass (potentielle) Problem zu lösen, ist eine Lösung immer hochgeladenen Dateien umbenennen, mit Namen Sie Kontrolle. (Ein einfacher Zähler würde wahrscheinlich auf den Trick)

Eine andere Sache ist: $_FILES["file"]["name"] wird vom Client, und als solches gesendet werden, kann wahrscheinlich gefälscht werden, um enthält, was jemand wünschen würde. Wenn es so etwas wie "../../index.php" (oder so ähnlich - Sie haben die Idee), könnte dies jemand erlauben, jede gewünschte Datei auf Ihrem Server zu setzen.

Um dies zu verhindern, sollten Sie sicherstellen, dass der Dateiname/Pfad, der als Ziel von move_uploaded_file verwendet wird, nichts "Gefährliches" enthält. Eine Lösung könnte basename sein. (Siehe zum Beispiel Beispiel # 2 auf POST method uploads)

Sie möchten vielleicht auch den MIME-Typ der hochgeladenen Datei überprüfen, so dass Sie zum Beispiel keine ausführbaren Dateien erhalten - und Sie sollten sicherstellen, dass hochgeladene Dateien nicht sind ausführbar vom Webserver.

Verwandte Themen