nom de fichier avec apostrophe envoyé par formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : nom de fichier avec apostrophe envoyé par formulaire

Re: nom de fichier avec apostrophe envoyé par formulaire

par AB » 12 sept. 2008, 17:12

Bonjour à tous,
débutant en php, je galère avec ceci:
sur une page index.php, j'ai un formulaire qui permet aux utilisateurs du site d'uploader, via la page upload.php, un fichier quelconque sur le serveur. Seulement voilà, si le nom du fichier comporte une apostrophe, ce dernier apparaitra sur le site sans le début du nom (en fait, plan d'action.pdf devient action.pdf).
Je n'arrive pas à lui faire comprendre que l'apostrophe doit être comprise comme un caractère à part entière.
Dans le php.ini, j'ai magic_quotes_gpc = On.
voici le bout de code de la page upload.php:
<?php
    $repertoireDestination = "D:/wamp/www/GROUPEMENT/STSIC/";
    $nomDestination        = $_FILES["monfichier"]["name"];

    // Pour raison de sécurité nous ajouterons aux fichier portant une extension .php .php3, l'extension .txt
    if (eregi(".php", $nomDestination)) {
        $nomDestination .= ".txt";
    }
    
 if(!isset($erreur))
  {
    $nomDestination = basename($_FILES['monfichier']['name']);
	
    // formatage nom fichier
    // enlever les accents
    $nomDestination= strtr($nomDestination, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
 // remplacer les caracteres autres que lettres, chiffres et point par _
    $nomDestination= preg_replace('/([^.a-z0-1]+)/i', '_', $nomDestination);
  } 

if (is_uploaded_file($_FILES["monfichier"]["tmp_name"])) {
        if (rename($_FILES["monfichier"]["tmp_name"],
                   $repertoireDestination.$nomDestination)) {
            echo "Fichier transféré avec succès";

si quelqu'un voulait bien m'aider, ça serait bien sympa
d'avance merci à ceux qui me liront
La fin de ton code est bizarre. Habituellement je fais
if(isset($_FILES['monfichier']['tmp_name']) && move_uploaded_file($_FILES['monfichier']['tmp_name'], $repertoireDestination.$nomDestination))
							{ echo "Fichier transféré avec succès"; }

par albat » 12 sept. 2008, 16:33

  1. Un nom de fichier ne doit pas contenir d'apostrophes,
    même si les alias qu'affiche Windows autorise ce caractère.
    Permissivité n'est pas règle.
  2. magic_quotes_gpc = Off !!!
  3. mysql_real_escape_string

nom de fichier avec apostrophe envoyé par formulaire

par lebordeluche » 12 sept. 2008, 16:15

Bonjour à tous,
débutant en php, je galère avec ceci:
sur une page index.php, j'ai un formulaire qui permet aux utilisateurs du site d'uploader, via la page upload.php, un fichier quelconque sur le serveur. Seulement voilà, si le nom du fichier comporte une apostrophe, ce dernier apparaitra sur le site sans le début du nom (en fait, plan d'action.pdf devient action.pdf).
Je n'arrive pas à lui faire comprendre que l'apostrophe doit être comprise comme un caractère à part entière.
Dans le php.ini, j'ai magic_quotes_gpc = On.
voici le bout de code de la page upload.php:
<?php
    $repertoireDestination = "D:/wamp/www/GROUPEMENT/STSIC/";
    $nomDestination        = $_FILES["monfichier"]["name"];

    // Pour raison de sécurité nous ajouterons aux fichier portant une extension .php .php3, l'extension .txt
    if (eregi(".php", $nomDestination)) {
        $nomDestination .= ".txt";
    }
    
 if(!isset($erreur))
  {
    $nomDestination = basename($_FILES['monfichier']['name']);
	
    // formatage nom fichier
    // enlever les accents
    $nomDestination= strtr($nomDestination, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
 // remplacer les caracteres autres que lettres, chiffres et point par _
    $nomDestination= preg_replace('/([^.a-z0-1]+)/i', '_', $nomDestination);
  } 

if (is_uploaded_file($_FILES["monfichier"]["tmp_name"])) {
        if (rename($_FILES["monfichier"]["tmp_name"],
                   $repertoireDestination.$nomDestination)) {
            echo "Fichier transféré avec succès";

si quelqu'un voulait bien m'aider, ça serait bien sympa
d'avance merci à ceux qui me liront