Mauvaise extension !

Eléphanteau du PHP | 28 Messages

05 oct. 2005, 09:32

Lorsque j'envoie un .wmv cela marche, mais lorsque j'envoie un .mpg
ou un .tar.gz
on me dit dans firefox :

Code : Tout sélectionner

le fichier ne contient aucune donnée
avec :

Code : Tout sélectionner

$authorized_extensions = array('.jpg','.gif','.doc','.xls','.pdf','.odt','.ott','.sxw','.stw','.mov','.wmv','.mpg','.mp3','.ogg','.zip','.rar','.gz');

Mammouth du PHP | 19672 Messages

05 oct. 2005, 09:35

Alors au lieu de tester l'extension, teste sur le type mime du fichier ($_FILES['nom_champ']['type']). Tu trouveras la liste des types correspondant aux types de fichier que tu veux ICI
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 28 Messages

05 oct. 2005, 09:56

Je souhaite télécharger :
image/gif
application/pdf
application/x-tar
application/zip
audio/x-wav
image/gif
image/jpeg
multipart/x-gzip
multipart/x-zip
video/mpeg
video/quicktime
video/msvideo
video/x-sgi-movie
Je change
$extension = substr($_FILES['aFile']['name'], -4, 4);
par
$extension = substr($_FILES['aFile']['type'], -4, 4);

Fau-t-il changer :
$authorized_extensions = array('.jpg','.gif','.doc','.xls','.pdf','.odt','.ott','.sxw','.stw','.mov','.wmv','.mpg','.mp3','.ogg','.zip','.rar','.gz');

Et pour les fichier .odt .ott ... d'OpenOffice2 que faut-il ?

Mammouth du PHP | 19672 Messages

05 oct. 2005, 10:27

Non, tu ne remplace pas un extrait du nom par un extrait du type et on ne cherche dans ce cas pas l'extension du fichier mais son type mime

Donc il faudrait avoir une variable $authorized_type = "liste des types...."

Fais un var_dump($_FILES) après la sélection d'un fichier, tu devrais voir apparaître le type de fichier dans le tableau. Essaye avec un des fichiers OpenOffice2, tu auras ta réponse.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2005, 10:46

Je mets
// Modif $authorized_extensions = array('.jpg','.gif','.doc','.xls','.pdf','.odt','.ott','.sxw','.stw','.mov','.wmv','.mpg','.mp3','.ogg','.zip','.rar','.gz');
$authorized_type = "image/gif, application/pdf, application/x-tar, application/zip, audio/x-wav, image/gif, image/jpeg, multipart/x-gzip,
multipart/x-zip, video/mpeg, video/quicktime, video/msvideo, video/x-sgi-movie";
et
// Modif $extension = substr($_FILES['aFile']['name'], -4, 4);
$extension = substr($_FILES['aFile']['type'], -4, 4);
// if (in_array(strToLower($extension), $authorized_extensions))
if (in_array(strToLower($extension), $authorized_type))

{
Cela ne marche pas encore !

Mammouth du PHP | 19672 Messages

05 oct. 2005, 11:07

Mais enfin pourquoi fais-tu un substr() sur le type ? :shock:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 28 Messages

05 oct. 2005, 11:44

Je propose :
$extension = ($_FILES['aFile']['type']);
et que faut-il dans :
if (in_array(strToLower($extension), $authorized_type))

{

Mammouth du PHP | 19672 Messages

05 oct. 2005, 13:04

Il y a quoi au juste dans ton tableau $authorized_type ? J'ai un vague doute là :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 28 Messages

05 oct. 2005, 14:04

Code : Tout sélectionner

<?php /** * function formatFileName * @access public * @param string - nom de fichier à formater * @param int - longueur maximale autorisée pour le nom de fichier * @return string - nom de fichier formaté * @desc Tronque éventuellement le nom de fichier, le convertit en minuscules et * y élimine les caractères potentiellement dangereux. */ function formatFileName($aFileName, $aMaxLength = 50) { $aFileName = strToLower(subStr($aFileName, 0, $aMaxLength)); $aFileName = ereg_replace('[^a-zA-Z0-9,._\+\()\-]', '_', $aFileName); return $aFileName; } // end of function formatFileName() /2 /* PARAMETRES DE CONFIGURATION DU SCRIPT */ // chemin d'accès au répertoire d'upload (vers où le fichier uploadé temporaire sera transféré) // ce répertoire doit EXISTER et être ACCESSIBLE EN ECRITURE !! $destination_dir = 'textes/'; // taille maximale en octets du fichier à uploader $file_max_size = 10000000000; // extensions de fichiers autorisées // $authorized_extensions = array('.jpg','.gif','.doc','.xls','.pdf','.odt','.ott','.sxw','.stw','.mov','.wmv','.mpg','.mp3','.ogg','.zip','.rar','.gz'); $authorized_type = " image/jpeg, image/gif, image/png, application/pdf, application/postscript, application/msword, application/rtf, application/vnd.ms-excel, application/vnd.ms-powerpoint, text/html application/zip, multipart/x-zip, application/x-tar, multipart/x-gzip, audio/x-wav, audio/x-wav, audio/mpeg, audio/x-mpeg, audio/mpeg3, audio/x-mpeg3, audio/mpeg-url, audio/x-mpeg-url, audio/x-ogg, audio/mod, audio/x-mod, audio/midi, audio/x-midi, video/mpeg, video/x-mpeg, video/x-ms-wmv, video/x-ms-asf, video/quicktime, video/x-quicktime, video/msvideo, video/x-msvideo, video/x-sgi-movie "; /* TRAITEMENT PRINCIPAL */ // vérifie l'existence du répertoire de destination if (!is_dir($destination_dir)) { echo 'Veuillez indiquer un r&eacute;pertoire destination correct !'; die(); } // vérifie que répertoire de destination a des droits en écriture if (!is_writeable($destination_dir)) { echo 'Veuillez spécifier des droits en écriture pour le r&eacute;pertoire destination !'; die(); } // réception du formulaire if (isSet($_POST['submitFile'])) { // vérifie qu'un fichier a bien été soumis if (isSet($_FILES) && is_array($_FILES)) { // pas d'erreur lors de l'upload if ($_FILES['aFile']['error'] == UPLOAD_ERR_OK) { // vérifie la taille en octets if ($_FILES['aFile']['size'] <= $file_max_size) { // vérifie l'extension du fichier recu // il est aussi possible (et sans doute mieux) de se baser sur $_FILES['aFile']['type'] // qui retourne le type MIME correspondant (par exemple: image/jpeg) // Modif $extension = substr($_FILES['aFile']['name'], -4, 4); $extension = ($_FILES['aFile']['type']); // if (in_array(strToLower($extension), $authorized_extensions)) if (in_array(strToLower($extension), $authorized_type)) { // définit un nom de fichier destination unique à partir du nom du fichier original formaté // modif RIC //$destination_file = time().formatFileName($_FILES['aFile']['name']); $destination_file = formatFileName($_FILES['aFile']['name']); // déplace le fichier uploadé du répertoire temporaire // vers les répertoire/fichier destination spécifiés if (move_uploaded_file($_FILES['aFile']['tmp_name'], $destination_dir.DIRECTORY_SEPARATOR.$destination_file)) { echo 'Fichier valide et upload&eacute; correctement.'; } else { // error sur move_uploaded_file echo 'Le fichier n\'a pas &eacute;t&eacute; upload&eacute; correctement !'; } } else { // pas d'extension ou mauvaise extension echo 'Mauvaise extension !'; } } else { // Taille maximale dépassée echo 'Fichier trop volumineux !'; } } else { // Erreur lors de l'upload switch ($_FILES['aFile']['error']) { case UPLOAD_ERR_INI_SIZE: echo 'Le fichier upload&eacute; d&eacute;passe la valeur sp&eacute;cifi&eacute;e pour upload_max_filesize dans php.ini.'; break; case UPLOAD_ERR_FORM_SIZE: echo 'Le fichier upload&eacute; d&eacute;passe la valeur sp&eacute;cifi&eacute;e pour MAX_FILE_SIZE dans le formulaire d\'upload.'; break; case UPLOAD_ERR_PARTIAL: echo 'Le fichier n\'a &eacute;t&eacute que partiellement upload&eacute;.'; break; default: echo 'Aucun fichier n\'a &eacute;t&eacute upload&eacute;.'; } // switch } } else { // aucun fichier reçu echo 'Pas de fichier recu'; } } // fin de réception de formulaire ?>

Mammouth du PHP | 19672 Messages

05 oct. 2005, 14:15

Pour que ça marche avec in_array(), il faudrait que les valeurs possibles soient dans un tableau:
$authorized_type = array(
 "image/jpeg",
 "image/gif",
 "image/png",
 "application/pdf",
 "application/postscript",
 "application/msword",
 "application/rtf",
 "application/vnd.ms-excel",
 "application/vnd.ms-powerpoint",
 "text/html",
 "application/zip",
 "multipart/x-zip",
 "application/x-tar",
 "multipart/x-gzip",
 "audio/x-wav",
 "audio/x-wav",
 "audio/mpeg",
 "audio/x-mpeg",
 "audio/mpeg3",
 "audio/x-mpeg3",
 "audio/mpeg-url",
 "audio/x-mpeg-url",
 "audio/x-ogg",
 "audio/mod",
 "audio/x-mod",
 "audio/midi",
 "audio/x-midi",
 "video/mpeg",
 "video/x-mpeg",
 "video/x-ms-wmv",
 "video/x-ms-asf",
 "video/quicktime",
 "video/x-quicktime",
 "video/msvideo",
 "video/x-msvideo",
 "video/x-sgi-movie"
 );
Comme ça donc... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 28 Messages

05 oct. 2005, 15:35

Marche
.jpg
.doc
.gif
.wmv
.pps
.htm

Marche pas :
.mp3
.odt
.tar.gz
.xcf
.swf

Même le mp3 ?

avec :
$authorized_type = array(
"image/jpeg",
"image/gif",
"image/png",
"application/pdf",
"application/postscript",
"application/msword",
"application/rtf",
"application/vnd.ms-excel",
"application/vnd.ms-powerpoint",
"text/html",
"application/vnd.oasis.opendocu",
"application/zip",
"multipart/x-zip",
"application/x-tar",
"multipart/x-gzip",
"audio/x-wav",
"audio/x-wav",
"audio/mp3",
"audio/mpeg",
"audio/x-mpeg",
"audio/mpeg3",
"audio/x-mpeg3",
"audio/mpeg-url",
"audio/x-mpeg-url",
"audio/mp4",
"video/mpeg",
"video/x-mpeg",
"video/x-ms-wmv",
"video/x-ms-asf",
"video/quicktime",
"video/x-quicktime",
"video/msvideo",
"video/x-msvideo",
"video/x-sgi-movie"
);

Mammouth du PHP | 19672 Messages

05 oct. 2005, 15:36

Pour vérifier, ajoute une ligne echo($_FILES['champ_formulaire']['type']) et envoie un mp3 via le formulaire pour faire afficher le type exact à l'écran, tu seras fixé
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2005, 17:03

J'ai mis echo($_FILES['aFile']['type']) en première ligne de code donné au dessus.

S'il accepte le fichier, je vois le type Mime qui apparait avant
"uploadé correctement..."


Sinon, j'ai une alerte Firefox : "le document contient aucune donnée"

Est-ce un problème de configuration de firefox ?

Mammouth du PHP | 19672 Messages

05 oct. 2005, 17:18

Si ça ne charge pas du tout la page, c'est à tout le moins une curiosité.

Quelle valeur il y a dans l'attribut action de la balise <form> ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 28 Messages

05 oct. 2005, 17:21

<form enctype="multipart/form-data" method="post" action="upload.php" name="form_upload">

<!-- Taille maximale en octets. Non sécurisé car facilement contournable !! -->

<input type="hidden" name="MAX_FILE_SIZE" value="10000000000">
Site Free.fr
"Être bahá'i signifie simplement aimer la terre toute entière, aimer l'humanité et essayer de la servir, travailler pour la paix universelle et la famille humaine" Abdul'l-Bahá
"Vouloir s'ouvrir aux autres n'est pas une preuve de faiblesse, c'est une preuve d'intelligence"
Mathieu Ricard.
ma config