jeudi 20 octobre 2011

PHP : Upload et lecture d'un fichier

Comment charger un fichier, le transférer dans le dossier temporaire d'un serveur mutualisé, puis y accéder en lecture.
liens : http://www.commentcamarche.net,   
http://www.siteduzero.com

Pour rappel, je suis sur serveur mutualisé, donc ce qui marche sur mon PC, ne fonctionne pas nécessairement en ligne.

1er étape :  
Créer, à partir de la racine du site un dossier temporaire '/tmp' dans lequel seront stockés les fichiers uploadé.
Modifier les paramètres d'accès (CHMOD sous unix cf lien site du zéro), puis écrire la ligne de code ci-dessous qui permet d'indiquer au serveur le path du dossier temporaire.

<?php
      ini_set('upload_tmp_dir', $myserveur_path.'/tmp');

 ?>

2ème étape (cf site du zéro) : formulaire d'upload d'un fichier 
 action = "" car je traite dans le même fichier html, le résultat du formulaire.
 
<form method="post" action="" enctype="multipart/form-data">   
    <div >
        <input type="hidden" name="MAX_FILE_SIZE" value="2097152">   
        <input type="file" name="file_name" size="50">  
        <input type="submit" value="Envoyer"
    </div>     
</form>
<br/>

3ème étape : récupération de l'array qui reprend les paramètres du fichier chargé, par défaut je teste si un fichier a été chargé, cad si $_FILES['file_name'] existe ou est VRAI.
Puis on analyse les cas d'erreur, j'ai complété la liste fournie sur le site du zero avec le cas 6, lié a un problème de dossier temporaire.

<?php
    if (isset($_FILES['file_name']))
    {
        if ($_FILES['file_name']['error']) {        // www.commentcamarche.net   
                switch ($_FILES['file_name']['error']){   
                           case 1: // UPLOAD_ERR_INI_SIZE   
                           echo "Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";   
                           break;   
                           case 2: // UPLOAD_ERR_FORM_SIZE   
                           echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !";
                           break;   
                           case 3: // UPLOAD_ERR_PARTIAL   
                           echo "L'envoi du fichier a été interrompu pendant le transfert !";   
                           break;   
                           case 4: // UPLOAD_ERR_NO_FILE   
                           echo "Le fichier que vous avez envoyé a une taille nulle !";
                           case 6: // UPLOAD_ERR_NO_FILE   
                           echo "Missing temporary folder : ".realpath(sys_get_temp_dir( void )).'<br/>';
                           break;   
                  }   
        }   
        else {   
            // $_FILES['file_name']['error'] vaut 0 soit UPLOAD_ERR_OK   
            // ce qui signifie qu'il n'y a eu aucune erreur dans le chargement  
           
            // transfert du fichier dans un répertoir temporaire du serveur (siteduzero)
            if ((isset($_FILES['file_name']['name'])&&
                        ($_FILES['file_name']['error'] == UPLOAD_ERR_OK))) {   
                $chemin_destination = './tmp/';  
                $myfile_path = $chemin_destination.$_FILES['file_name']['name'];
                move_uploaded_file($_FILES['file_name']['tmp_name'], $myfile_path);   
            }   
           
            // open file
            $myfile = fopen($myfile_path, 'r');    //ouverture en lecture seule
           
            //load data in table, ligne à ligne et chargement dans un tableau de strings
            $index = 0;
            while($word[$index] = fgets($myfile)){         
                $index++;
            }
            $nbr_lines = $index;
            fclose($myfile);
           
        }   
    }

 ?>



Aucun commentaire:

Enregistrer un commentaire