2009-07-22 12 views
0

1.Hi, j'ai un script de téléchargement de fichiers à usage interne qui télécharge les fichiers dans un répertoire. Quand je télécharge quelque chose de mon ordinateur avec un spcace dans le nom, par exemple 1.zip, il télécharge avec un espace dans le nom supprimant ainsi le lien dans un email. Est-il possible de faire apache enlever l'espace quand il est téléchargé ou en faire un trait de soulignement?Supprimer les espaces dans les noms de fichiers apache

Le deuxième problème que j'ai est comment est-ce que j'analyserais ceci pour faire au lien un lien d'email avec l'url du dossier comme le corps de l'email et l'email addy n'importe quoi?

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"]; 

Répondre

7

Vous avez juste besoin urlencode() votre nom de fichier et tout va bien:

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

Mais si vous voulez supprimer les espaces pour une autre raison, vous pouvez utiliser 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

Comment pourrais-je faire pour que je puisse utiliser ce lien comme un mailto comme le lien irait sur le corps et tout ce qui serait dans le message – hnhh

+0

Jetez un oeil à la section des exemples de la RFC selon: http: // tools .ietf.org/html/rfc2368 # section-6 – soulmerge

+0

merci beaucoup c'est vraiment utile –

1

Essayez:

+0

Merci! n'importe quelle ide sur comment je ferais un email comme chose – hnhh

+0

Vous voulez envoyer ce lien pour un email? – Nathan

+0

Fondamentalement, je veux qu'il fasse écho à un mailto: [email protected] avec le corps du texte sur le lien. – hnhh

1

En note: avec le code que vous utilisez, que se passe-t-il si deux fichiers portant le même nom sont téléchargés? Si vous ne faites pas de vérification (comme "est-il un fichier qui a déjà ce nom dans $uploaddir?") le deuxième fichier remplacera le premier.

Ce n'est peut-être pas quelque chose que vous voulez ... est-ce?

Sinon, pour résoudre ce problème (potentiel), une solution est de toujours renommer les fichiers téléchargés, avec les noms contrôle. (Un compteur simple serait probablement le tour)

Une autre chose est: $_FILES["file"]["name"] est envoyé par le client, et, en tant que tel, peut probablement être forgée pour tout ce que contient quelqu'un voudrait. S'il contient quelque chose comme "../../index.php" (ou quelque chose comme ça - vous avez l'idée), cela pourrait permettre à quelqu'un de mettre n'importe quel fichier qu'ils veulent sur votre serveur.

Pour éviter que cela se produise, vous devez vous assurer que le nom/chemin de fichier utilisé comme destination de move_uploaded_file ne contient rien de «dangereux». Une solution pourrait être d'utiliser basename. (Voir, par exemple, l'exemple n ° 2 sur POST method uploads)

Vous pouvez également vérifier le type MIME du fichier téléchargé, de sorte que vous n'obtenez pas d'exécutables, par exemple - et vous devez vous assurer que les fichiers téléchargés ne sont pas exécutable par le serveur web.

Questions connexes