8795 sujets

Développement web côté serveur, CMS

Bonjour,

Sujet traité pas mal de fois sur la toile, cependant je n'ai pas trouvé de solution dans mes recherches. J'aimerai bien envoyer un fichier et le stocker sur mon serveur grâce à un input type file. Alors oui il y a pleins de tuto sur le net, je les ai suivis. Mais je dois m'y prendre comme un manche car ça ne fonctionne jamais.

Je suis parti sur ce code :
	$dossier = 'dl/';
	$fichier = basename($_FILES['fichier']['name']);
	$taille_maxi = 100000000;
	$taille = filesize($_FILES['fichier']['tmp_name']);
	$extensions = array('.XML', '.xml');
	$extension = strrchr($_FILES['fichier']['name'], '.'); 
	//Début des vérifications de sécurité...
	if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
	{
	     $erreur = 'Erreur type fichier';
	}
	if($taille>$taille_maxi)
	{
	     $erreur = 'Le fichier est trop gros...';
	}
	if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
	{
	     //On formate le nom du fichier ici...
	     $fichier = strtr($fichier, 
		  'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
		  'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
	     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
	     if(move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
	     {
		  echo 'Upload effectué avec succès !';
	     }
	     else //Sinon (la fonction renvoie FALSE).
	     {
		  echo 'Echec de l\'upload !';
	     }
	}
	else
	{
	     echo $erreur;
	}


L'html juste au cas où :

  <form action="index.php" method="post" id="moulinette" enctype="multipart/form-data">
    <fieldset>
      <legend>Charger un fichier XML</legend>
      <p>
	<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
	<label for="fichier">Fichier</label>
	<input type="file" name="fichier" id="fichier" />
      </p>
    </fieldset>
    <input type="submit" value="Moulinez !" id="moulinez" />
  </form>


Ce qui est étrange c'est qu'il ne me renvoit aucun feedback, positif ou négatif. Quand je met un var_dump dans cette portion de code il ne s'affiche pas (?!). Je me suis dis que c'était peut être en rapport avec ma configuration de PHP. J'ai donc fais un phpinfo() pour vérifier les informations suivantes :

file_uploads -> on
upload_tmp_dir -> no_value
upload_max_filesize -> 300 mo
post_max_size -> 300 mo

Ici je constate qu'il n'y a pas de répertoire défini pour les fichiers temporaires.

J'en viens donc à ma première question : Le problème peut-il venir de là ?

Et ma deuxième : peut-on modifier ces paramètres sur un serveur mutualisé ?

Merci d'avance !
Modifié par Gili (23 Jun 2012 - 12:54)
Merci de ta réponse JB, j'en viens donc à la conclusion que le problème vient des possibilités offertes par mon hébergement mutualisé. J'ai essayé de changer ces paramètres grâce à une fonction php dont je ne me rappel plus le nom mais ça n'a pas fonctionné.

Du coup j'ai contourner le problème, c'est pas très user friendly pour celui qui l'utilise mais bon.

Et désolé de la lenteur de ma réaction, j'en glande plus une pour l'instant niveau veille, ça dois être l'effet vacances... merci encore une fois en tout cas Smiley smile