IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupération des fichiers


Sujet :

Langage PHP

  1. #1
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut Récupération des fichiers
    Bonjour

    un formulaire sert à envoyer des fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <div class="form-group grid_5 prefix_1">
                <label for="nom" >Votre nom</label>
                <input type="text" class="form-control" placeholder="nom" name="nom" required>
              </div>
     
              <div class="form-group grid_5">
                <label for="prenom" >Prenom</label>
                <input type="text" class="form-control" placeholder="prenom" name="prenom" >
              </div>
     
            <div class="form-group grid_5 prefix_1 ">
              <label for="lien">Vous êtes:</label>
                <select name="lien"  class="form-control">
                <option value="1">1 </option>
                <option value="2">2</option>
               <option value="3">3</option>
               <option value="Vous désirez simplement lui témoigner votre amitié">Vous désirez simplement lui témoigner votre amitié</option>
                </select>
    </div>
                <div class="form-group grid_5  ">
              <label for="lien">En quelle année l'avez vous connu</label>
              <select name="an"  class="form-control grid_2 ">
    <option>2016</option>
    <option>2015</option>
    <option>2014</option>
    <option>2013</option>
    <option>2012</option>
    <option>2011</option>
    <option>2010</option>
    <option>2009</option>
    <option>2008</option>
    <option>2007</option>
    <option>2006</option>
    <option>2005</option>
    <option>2004</option>
    <option>2003</option>
    <option>2002</option>
    <option>2001</option>
    <option>2000</option>
    <option>1999</option>
    <option>1998</option>
    <option>1997</option>
    <option>1996</option>
    <option>1995</option>
    <option>1994</option>
    <option>1993</option>
    <option>1992</option>
    <option>1991</option>
    <option>1990</option>
    <option>1989</option>
    <option>1988</option>
    <option>1987</option>
    <option>1986</option>
    </select>
     
    </div>
     
     
      <div class="form-group grid_5 prefix_1  ">
              <label for="message">Un message ?</label>
              </div>
              <div class="form-group grid_10 prefix_1  ">
              <textarea class="form-group grid_12 " name="message"></textarea>
    </div>
     
              <div class="form-group grid_7 prefix_1">
                <label for="file">les fichiers joints (photo ou video)</label>
                 <input type="file" name="fichier">
               </div>
    <div class="grid_12">
               <input type="submit" value="enregistrer" class="btn btn-success grid_6 push_3">
               </div>
              </form>
    </body>
    </html>
    lors de la récupération j'ai des problèmes avec les fichiers vidéo pas de détection si l'extension n'est pas bonne, des fichiers envoyés provoque un enregistrement de tous les champs vide dans la base.
    en cas de plantage l'affichage des lignes 26 et 27 ne renvoie rien les variables sont vides, aucun fichier détecté et aucune erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    <?php 
     
    include '../detect_mobil/Mobile_Detect.php';
    include '../@_INCLUDE/base_Connexion.php';
     
     
    $chemin = "medias/";
    $extension = array("jpg", "jpeg", "gif", "wmv","wma","mp4","m4v","mov","avi","mpg","mpeg","3gp","pdf");
    date_default_timezone_set("Europe/Paris");
     
    $date = date("Y-m-d H:i:s");
    $dateen = date("D, d M Y H:i:s O");
    foreach ($_POST as $key => $val) {
    	$$key = htmlspecialchars(mysqli_real_escape_string($liendb, $val));
     
    }
     
    // =========================================================
     
    // verification du remplisage des champs nécessaire
     
    // ======================================================
     
     
     
    	echo"test".$_FILES['fichier']['tmp_name'];
    echo  "<br>erreur ".$_FILES['fichier']['error'];
     
    if ((is_uploaded_file($_FILES['fichier']['tmp_name']))) {
     
    	$fotonews = $_FILES['fichier']['name'];
     
    	$info = new SplFileInfo($fotonews);
    	$ext = pathinfo($info->getFilename(), PATHINFO_EXTENSION);
    		if (in_array(strtolower($ext), $extension)) {
    			$nomfich = uniqid() . "." . $ext;
    			$foto = $chemin . $nom."_".$nomfich;
    			move_uploaded_file($_FILES['fichier']['tmp_name'], $foto);
    			} 
    				else {
    					$messageav = "le format de fichier doit être au format JPG, GIF, PDF,WMV,WMA, MP4, MOV, AVI, MPG,3GP";
    					}
    	} 
    		else {
    		$foto = NULL;
    			IF(!empty($img)){
    				$foto=$img;
    			} 
    	}
     
     
    // ===================================================================
     
    // insert mysql 
     
     
    // ====================================================================
     
     
     
    	$sql = "INSERT INTO olona (nom, prenom, lien, an, message, fichier )
              VALUES ('$nom', '$prenom', '$lien', '$an','$message','$foto')";
     
    mysqli_query($liendb,$sql)or die(mysql_error());;
     
     
     
    $idinsert = mysqli_insert_id($liendb);
     
     
    // ===========================================================================
     
    // requete sql pour afficher l'élément dont l'id correspond au N° sorti
     
    // ===========================================================================
    $sqlquest = "SELECT * FROM olona where id='$idinsert'";
    $req = mysqli_query($liendb, $sqlquest) or die(mysql_error());

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    N'utilise pas des traitement maisons horribles comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($_POST as $key => $val) {
    	$$key = htmlspecialchars(mysqli_real_escape_string($liendb, $val));
    }
    Ensuite tu devrais indenter proprement ton code pour pouvoir voir clairement les enchainement logiques.
    Regarde le massacre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    move_uploaded_file($_FILES['fichier']['tmp_name'], $foto);
    			} 
    				else {
    					$messageav = "le format de fichier doit être au format JPG, GIF, PDF,WMV,WMA, MP4, MOV, AVI, MPG,3GP";
    					}
    	}
    Pour ton debuguage, as-tu regardé ce que contiennent $_POST et $_FILES quand le problème se pose ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut
    Bonjour sabotage

    Je viens de tester un var_dump($_POST); avant le foreach, quand ça plante ça ne contient rien.
    Le même envoi avec les mêmes infos dans le formulaire en choisissant uniquement un autre fichier ça fonctionne.
    Les vidéos ont la même extension.mp4, mais certains fichiers posent ce problème sans rapport avec la taille des très gros fichiers passent et d'autres, plus petits, ne fonctionnent pas.
    Ce souci provint apparemment uniquement des vidéos, les autres fichiers avec les bonnes extensions passent, ceux comportant les mauvaises extensions sont rejetés.
    Mais si j'essaye d'envoyer des vidéos par exemple mkv ou vob ça plante alors que le filtrage de l'extension aurait dû agir ????

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Eventuellement tu peux essayer ce module d'upload ajax/php. Il est livré avec de nombreux exemples prêts à l'emploi et il te faudra donc moins de 3 minutes avant de faire les premiers tests (le temps de décompresser le dossier et de le poser sur ton serveur).

    Elle permet de surpasser les limitations serveur (même si apparemment ce n'est pas ça qui te pose problème) mais a aussi l'avantage de pouvoir reprendre un téléchargement interrompu provenant d'un arrêt volontaire ou panne internet ou serveur en utilisant la partie déjà téléchargée, ce qui est un "plus" appréciable pour les gros fichiers. Il y a aussi de nombreuses informations en temps réel disponibles : nom, taille, progression graphique, temps restant, affichage des vignettes si le fichier est une image, etc.

    Etant donné que les exemples fournis sont fonctionnels, tu pourrais facilement voir à l'occasion si ce sont des fichiers particuliers qui posent problème, même si finalement tu ne l'utilise pas.


    Question concernant ton code : ça sert à quoi d'utiliser "SplFileInfo" si au final tu utilises "pathinfo" sur la méthode "getFilename()" pour trouver l'extension ?
    Si tu veux contrôler la signature du type de fichier c'est plutôt finfo_file qu'il faut utiliser. Et si tu veux contrôler uniquement l'extension, "pathinfo" est suffisant.

  5. #5
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut
    merci abciweb
    j'ai regardé rapidement ta solution développé en AJAX, superbe boulot, le mode d'emploi est bien fait. je vais me pencher là dessus.
    Mais si quelqu'un a une idée du pourquoi certains fichiers ne sont pas transmis par le formulaire, ça me permettrais d'être moins bête.
    Merci pour tes remarques sur le code c'est du copier coller qui date un peu, j'ai regardé la fonction fileinfo que je connaissais pas je vais dorénavant plutôt utilisé ça, si je n'utilise pas ton script.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Concernant tes fichiers, il est possible que tu dépasses la taille POST maximale de ton serveur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut
    bien vu sabotage, j'ai changé le max_file_size et le post_max_size de mon MAMP et c'est rentré dans l'ordre.
    Merci.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par rvm31 Voir le message
    merci abciweb
    j'ai regardé rapidement ta solution développé en AJAX, superbe boulot, le mode d'emploi est bien fait. je vais me pencher là dessus.
    Merci et pour le mode d'emploi, d'ici la semaine prochaine une nouvelle version en html sera prête avec un menu "top gun" (je veux dire flottant, repositionnable et responsive) et qui permettra toute l'interactivité que ne permet pas le pdf actuel.
    Ton compliment me rassure car justement à l'occasion de la création de cette nouvelle structure, je me posais la question sur le contenu et l'organisation des rubriques. Finalement j'ai gardé à très peu de chose près le même contenu avec des réorganisations mineures car je voyais difficilement comment l'améliorer. Donc tu me soulage un peu de mes questions en confirmant comme je le pensais, que l'essentiel est fait et que la principale amélioration sensible dans l'immédiat est de proposer un menu inter actif et la convivialité des liens que permet le html


    Citation Envoyé par rvm31 Voir le message
    Mais si quelqu'un a une idée du pourquoi certains fichiers ne sont pas transmis par le formulaire, ça me permettrais d'être moins bête.
    Ben j'avais la même idée que sabotage, car effectivement des super globales $_POST et $_FILES vides sont typiquement le symptôme d'un dépassement de la limite "post_max_size" du serveur. Mais ce qui est bizarre est que tu disais aussi dans ce message que ton upload fonctionnait pour des fichiers plus gros et que c'était sans rapport avec la taille. D'où un gros mystère...
    D'ailleurs je t'ai aussi proposé de télécharger ce module d'upload pour éclaicir un peu ce mystère. A savoir que si ces mêmes fichiers passent avec le module Ajax c'est que le problème vient de ton code ou de ta configuration, et s'ils ne passent pas peut-être ces fichiers sont corrompus ou endommagés.

    Citation Envoyé par rvm31 Voir le message
    Merci pour tes remarques sur le code c'est du copier coller qui date un peu, j'ai regardé la fonction fileinfo que je connaissais pas je vais dorénavant plutôt utilisé ça, si je n'utilise pas ton script.
    Rien ne t'empêche d'utiliser les deux
    Dans le code du module côté serveur j'utilise "pathinfo" pour contrôler les extensions. C'est plus simple pour les débutants qui n'ont qu'à lister les extensions autorisées dans un tableau et ça offre une protection non négligeable puisqu'un éventuel fichier piraté et renommé ne pourra pas être exploité directement.

    Mais bon le mieux est encore d'éviter de laisser rentrer ce fichier sur le serveur et "fileinfo" permet une meilleure sécurité. Je n'ai pas utilisé cette fonction car elle a été longtemps source de problèmes, la lib n'était pas toujours disponible suivant les versions des serveurs, ça fonctionne rarement en local et la liste des mimestypes à autoriser est moins évidente.
    Mais les nouvelles versions de php on arrangé les choses et maintenant ça l'air de fonctionner au moins sur les serveurs distants (j'utilise ovh et un hébergeur clermontois). Je ferai peut être quelques lignes à ce sujet dans le nouveau mode d'emploi. En attendant je te donne le code compatible avec le module d'upload ajax/php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
    //...
    // Si un fragment de fichier est envoyé
    if($up->getFragment())
    {
        //...
        if($file_temp = $up->getTempAdressFile())
        {
    	$finfo = finfo_open(FILEINFO_MIME_TYPE);
    	$type = finfo_file($finfo, $file_temp);
    	finfo_close($finfo);
     
            // pour jpg, jpeg, gif, png, text, pdf
    	switch($type)
    	{
    	    // mettez tous les type valides ici
    	    case 'image/jpeg' :
    	    case 'image/gif' : 
    	    case 'image/png' : 
    	    case 'text/plain' :
    	    case 'application/pdf' : $type = true; break;
     
    	    default: $type = false;
    	}
     
    	if(!$type)
    	{
    	    // Efface le fichier temporaire
    		unlink($file_temp);
    	    // Efface le cookie de sauvegarde
    	       $up->deleteCookieSave();
    	    // Envoie un message dans le status du fichier
    	       $up->exitStatusErreur("Ce fichier n'est pas valide.");
    	}
         }
         //...
    }
    Et si tu préfères faire ton propre code, souviens-toi que ma méthode "getTempAdressFile()" retourne l'adresse du fichier temporaire, pour dire que ce n'est pas $_FILES['fichier']['name'] qu'il faut tester mais bien le fichier temporaire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération des fichiers CHI - Chiwrite
    Par phy4me dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 09/09/2010, 15h56
  2. Récupération des fichiers supprimés
    Par yosrounaw dans le forum Windows
    Réponses: 4
    Dernier message: 20/08/2010, 11h50
  3. Réponses: 1
    Dernier message: 31/03/2010, 23h18
  4. comment Prévenir la récupération des fichiers
    Par foufar2009 dans le forum Sécurité
    Réponses: 2
    Dernier message: 17/10/2009, 14h28
  5. Récupération des fichiers
    Par rubbergodz dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 22/07/2009, 01h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo