Discussion:
Verification upload photos par formulai re
(trop ancien pour répondre)
SAM
2009-10-04 08:08:49 UTC
Permalink
Salutatous,

Soit un formulaire avec un champ file nommé 'photo'

Je veux vérifier que c'est bien une image qui est envoyée

$ext_img = $_FILES['photo']['type'];

Le problème :
lors de mes essais certaines photos semblent ne pas communiquer leur
type (en particulier toutes celles de mon APN)

Je pensais que ce truc vérifiait l'extension du fichier et que les
majuscules/minuscules pouvaient faire avorter le machin, mais non.
Par contre un fichier sans extension n'est pas passé non plus.

Pourquoi ça marche pô ?
Une inspection dans un soft d'images montre pour ces photos que :
- le format serait : JPEG/JFIF
- le type de l'image serait : IMG DIGITAL IXUS 860 IS JPEG


Quelle autre soluce pourrait assurer que le fichier uploadé est bien une
image ?

Avec quoi comparer $ext_img pour s'assurer que l'image est bien du JPG,
du GIF, du PNG (pour les choix de post-traitements) ?

Mes essais se font dans mon Apache local en PHP 5.2.4
Au final, le formulaire sera sur un hébergeur en PHP 4.4.3-dev
--
sm
Olivier Miakinen
2009-10-04 13:12:17 UTC
Permalink
Bonjour Stéphane,
Post by SAM
Soit un formulaire avec un champ file nommé 'photo'
Je veux vérifier que c'est bien une image qui est envoyée
$ext_img = $_FILES['photo']['type'];
lors de mes essais certaines photos semblent ne pas communiquer leur
type (en particulier toutes celles de mon APN)
Comme d'hab, je ne pense pas que ce soit une très bonne idée de se baser
sur des infos provenant de l'extérieur, même si ce n'est pas le seul
contrôle.
Post by SAM
[...]
Quelle autre soluce pourrait assurer que le fichier uploadé est bien une
image ?
Tu peux regarder du côté des fonctions Exif :
http://fr.php.net/manual/fr/ref.exif.php

Il y a aussi ceci :
http://www.siteduzero.com/tutoriel-3-31523-exif-lire-les-infos-d-une-image.html

Mais tu peux également demander à la bibliothèque GD de lire l'image
comme si c'était du gif, du jpeg ou du png, pour voir si ça marche :
http://fr.php.net/manual/fr/function.imagecreatefromgif.php
http://fr.php.net/manual/fr/function.imagecreatefromjpeg.php
http://fr.php.net/manual/fr/function.imagecreatefrompng.php

Cordialement,
--
Olivier Miakinen
SAM
2009-10-05 05:20:19 UTC
Permalink
Post by Olivier Miakinen
Bonjour Stéphane,
Bonsoir Olivier,

Tu vois je tente encore une fois de m'y mettre. ;-)
(et tt de suite ça merdouille)
Post by Olivier Miakinen
Post by SAM
Soit un formulaire avec un champ file nommé 'photo'
C'est pour mettre sur un site pages perso chez Free.
Post by Olivier Miakinen
Post by SAM
Je veux vérifier que c'est bien une image qui est envoyée
$ext_img = $_FILES['photo']['type'];
lors de mes essais certaines photos semblent ne pas communiquer leur
type (en particulier toutes celles de mon APN)
Comme d'hab, je ne pense pas que ce soit une très bonne idée de se baser
sur des infos provenant de l'extérieur, même si ce n'est pas le seul
contrôle.
Benoitement je pensais que ce $_FILES était de la magie PHP qui
analysait le fichier présenté (au moins son début où je pense qu'il
indique quoi qu'il est).
Post by Olivier Miakinen
Post by SAM
Quelle autre soluce pourrait assurer que le fichier uploadé est bien une
image ?
http://fr.php.net/manual/fr/ref.exif.php
Ha! il me semble que j'avais entrevu ça (ou qque chose d'approchant)
mais je suppose qu'alors on uploade *tout* le fichier avant de l'autopsier ?

Ça m'ennuie un peu car l'upload autorisé est de 2Mo et de nos jours les
APN font facilement des images >5Mo. Il faudrait pouvoir savoir un peu
d'avance le poids du fichier, non ?
Ce que $_FILES['fichier']['size'] devait indiquer (sauf pour mes
photos, ce dont je les remecie sinon j'eusse fait confiance).

N'y a t'il pas moyen d'uploader un p'tit bout, de faire la vérif et, si
le poids (calculable par largeur/hauteur s'il n'est pas directement
donné) est dans la limite, reprendre ou continuer l'upload ?

Je crois aussi qu'il y a un timeout à 60 (secondes ?),
info() me dit :
max_execution_time 30
max_input_time 60
upload_max_filesize 2M
upload_tmp_dir no value <- que veut-ce dire ?
et pour l'exif :
EXIF Support enabled
EXIF Version 1.4 $Id: exif.c,v 1.118.2.37.2.4
2006/01/01 13:46:52 sniper Exp $
Supported EXIF Version 0220
Supported filetypes JPEG,TIFF
et pas de PNG ? de GIF ?
Post by Olivier Miakinen
http://www.siteduzero.com/tutoriel-3-31523-exif-lire-les-infos-d-une-image.html
Ç'est super intéressant, mébon je veux juste savoir si c'est une image ;-)
Juste savoir si on n'essaie pas d'uploader une savonnette.
Et bien sûr avant de l'avoir sous le pied, avant de l'accepter.
Post by Olivier Miakinen
Mais tu peux également demander à la bibliothèque GD de lire l'image
Je pensais à ça pour la suite (redimensionnement en particulier).
Post by Olivier Miakinen
http://fr.php.net/manual/fr/function.imagecreatefromgif.php
http://fr.php.net/manual/fr/function.imagecreatefromjpeg.php
http://fr.php.net/manual/fr/function.imagecreatefrompng.php
Cordialement,
à ++ je passe au post d'Alarch (qui m'a l'air de causer chinois).
--
sm
Alarch
2009-10-04 13:12:17 UTC
Permalink
Post by SAM
Salutatous,
Soit un formulaire avec un champ file nommé 'photo'
Je veux vérifier que c'est bien une image qui est envoyée
$ext_img = $_FILES['photo']['type'];
lors de mes essais certaines photos semblent ne pas communiquer leur
type (en particulier toutes celles de mon APN)
Je pensais que ce truc vérifiait l'extension du fichier et que les
majuscules/minuscules pouvaient faire avorter le machin, mais non.
Par contre un fichier sans extension n'est pas passé non plus.
Pourquoi ça marche pô ?
- le format serait : JPEG/JFIF
- le type de l'image serait : IMG DIGITAL IXUS 860 IS JPEG
Quelle autre soluce pourrait assurer que le fichier uploadé est bien une
image ?
Avec quoi comparer $ext_img pour s'assurer que l'image est bien du JPG,
du GIF, du PNG (pour les choix de post-traitements) ?
Mes essais se font dans mon Apache local en PHP 5.2.4
Au final, le formulaire sera sur un hébergeur en PHP 4.4.3-dev
Je te copie une méthode que je sors justement d'une classe d'upload
d'images, ce n'est certainement pas imparable, mais au moins ça ne se fie
pas simplement au type MIME, car si on ne contrôle que l'extention, il
suffit de renommer un fichier openoffice.odt en openoffice.jpg pour que ta
vérification ne serve plus à rien. Tu peux regarder et teste à partir de
ça. (comme c'est une méthode de classe on ne lui passe pas de paramètre,
elle récupère l'identifiant d'image par des propriétés de la fonction
($this->temporay_name etc. qui sont des infos qu'on récupèr dans php pour
les uploads, le début de la méthode publique t'indique ce que sont ces
propriétés :

public function verifUploadImage ($upload_array,$directory
$image_max_size)
{
# -- Le nom du fichier original sur la machine source -- #
$this->original_name = $upload_array['name'];
# -- Le type MIME du fichier, si le navigateur a fourni cette information.
Par exemple, "image/gif" -- #
$this->mime_type = $upload_array['type'];
# -- La taille du fichier envoyé, en octet -- #
$this->image_size = $upload_array['size'];
# -- Le nom temporaire du fichier qui sera chargé sur la machine
serveur -- #
$this->temporary_name = $upload_array['tmp_name'];
# -- erreurs sur l'upload -- #
$this->upload_error = $upload_array['error'];
# -- on contrôle la qualité du téléchargement du fichier -- #
...
}

Et voici la méthode qui tente de vérifier si une image annoncée en est bien
une.

private function verifImage () {
/**
La vérification des fichiers binaires d'image se fait en contrôlant la
signature hexadécimale de début de fichier.
En analysant des images existantes il semble qu'en hexadécimal les débuts
de fichiers soient les suivants :
Jpeg : FFD8FF
PNG : 89504E470D
Gif : 474946383961 (Gif89) et 474946383761 (Gif87)
*/
$suf_mime = eregi_replace("^.*/","",$this->mime_type);
if(file_exists($this->temporary_name)) {
$id = fopen($this->temporary_name,'rb');
$buffer = fread($id,6);
fclose($id);
}
$signature = bin2hex ($buffer);
$image_ok = false;
$result = array();
$suffixe = '';
if (substr($signature,0,6) == 'ffd8ff') {
$image_ok = true;
$info_message = "<li>La signature (".substr($signature,0,6).") de l'image
d'origine ".$this->original_name." atteste que c'est une image .jpg. Son
type mime annoncé était ".$this->mime_type."</li>\n";
$suffixe = '.jpg';
}
elseif (substr($signature,0,10) == '89504e470d') {
$image_ok = true;
$info_message = "<li>La signature (".substr($signature,0,10).") de l'image
d'origine ".$this->original_name." atteste que c'est une image .png. Son
type mime annoncé était ".$this->mime_type."</li>\n";
$suffixe = '.png';
}
elseif (substr($signature,0,12) == '474946383961' ||
substr($signature,0,12) == '474946383761') {
$image_ok = true;
$info_message = "<li>La signature (".substr($signature,0,12).") de l'image
d'origine ".$this->original_name." atteste que c'est une image .gif. Son
type mime annoncé était ".$this->mime_type."</li>\n";
$suffixe = '.gif';
}
else {
$warning_message = "<li>!!!ALERTE : Ce fichier n'est pas à format d'image
reconnu par l'application. Son type mime est ".$this->mime_type.".</li>\n";
}
$result[0] = $image_ok;
$result[1] = $info_message;
$result[2] = $warning_message;
$result[3] = $suffixe;
return $result;
} // fin de méthode verifImage

Si ça peut t'aider...

Cordialement

--
Marc
SAM
2009-10-05 05:20:19 UTC
Permalink
Post by Alarch
Post by SAM
Salutatous,
Soit un formulaire avec un champ file nommé 'photo'
Je veux vérifier que c'est bien une image qui est envoyée
$ext_img = $_FILES['photo']['type'];
lors de mes essais certaines photos semblent ne pas communiquer leur
type (en particulier toutes celles de mon APN)
Ha! j'ai oublié de dire qu'il serait bien que je connaisse (d'avance ?)
le poids du fichier. Free semble n'autoriser que 2Mo en upload.

De laisser envoyer 2Mo pour que l'upload errorise ce n'est pas sympa
pour l'expéditeur.
Post by Alarch
Je te copie une méthode que je sors justement d'une classe d'upload
d'images, ce n'est certainement pas imparable, mais au moins ça ne se fie
pas simplement au type MIME, car si on ne contrôle que l'extention, il
À la lecture des remarques d'Olivier ce $_FILES[] ne serait que des
infos envoyées par le navigateur. Si ça peut être un indicateur, pour
sûr ce n'est pas à prendre pour argent comptant. Les extensions non
plus, bien évidement.
Post by Alarch
Tu peux regarder et teste à partir de ça.
Je regarde, je regarde, mais ... je comprends pas tout !!
Post by Alarch
(comme c'est une méthode de classe on ne lui passe pas de paramètre,
elle récupère l'identifiant d'image par des propriétés de la fonction
($this->temporay_name etc. qui sont des infos qu'on récupèr dans php pour
les uploads, le début de la méthode publique t'indique ce que sont ces
Une petite ligne exemple ?
Que je comprenne comment on se sert de ces fonctions.

$upload_array ? qu'est-ce ? $_FILES ?
Si c'est ça, au moins pire du pire je ne récupère que le nom original.
Post by Alarch
public function verifUploadImage ($upload_array,$directory
$image_max_size)
{
(snip)
Post by Alarch
}
Et voici la méthode qui tente de vérifier si une image annoncée en est bien
une.
private function verifImage () {
/**
La vérification des fichiers binaires d'image se fait en contrôlant la
signature hexadécimale de début de fichier.
En analysant des images existantes il semble qu'en hexadécimal les débuts
Jpeg : FFD8FF
PNG : 89504E470D
Gif : 474946383961 (Gif89) et 474946383761 (Gif87)
*/
$suf_mime = eregi_replace("^.*/","",$this->mime_type);
... heu ... et si mime_type n'est pas connu ?
Post by Alarch
if(file_exists($this->temporary_name)) {
$id = fopen($this->temporary_name,'rb');
$buffer = fread($id,6);
fclose($id);
}
$signature = bin2hex ($buffer);
$image_ok = false;
$result = array();
(snip)
Post by Alarch
$result[0] = $image_ok;
$result[1] = $info_message;
$result[2] = $warning_message;
$result[3] = $suffixe;
return $result;
} // fin de méthode verifImage
Si ça peut t'aider...
J'ai copié-collé dans un de mes forms de test d'upload et ...
ça n'affiche plus rien ... doit avoir une erreur dans le php.
(j'ai dû en désactiver la fonction car je n'ai pas de warning php)
(et je ne sais comment le remettre)
Post by Alarch
Cordialement
Merci.
Ne me reste qu'à comprendre comment on s'en sert ;-)
(je suis archi neuneu en php)
--
sm
Alarch
2009-10-05 10:16:11 UTC
Permalink
Post by SAM
Ha! j'ai oublié de dire qu'il serait bien que je connaisse (d'avance ?)
le poids du fichier. Free semble n'autoriser que 2Mo en upload.
De laisser envoyer 2Mo pour que l'upload errorise ce n'est pas sympa
pour l'expéditeur.
[snip]
Post by SAM
Merci.
Ne me reste qu'à comprendre comment on s'en sert ;-)
(je suis archi neuneu en php)
Ben tout le monde débute un jour, moi je fais un peu de php depuis des
années et à chaque fois qu'Olivier me répond c'est une page du manuel que
j'avais loupée, donc bien que sachant faire quelques trucs, je reste bien
en deça de gens comme lui, pour dire qu'on est toujours le neuneu de
quelqu'un ! ;-)

Déjà tu devrais lire en détail cette page et celles qui en dépendent.

http://fr.php.net/manual/fr/features.file-upload.php

Première chose pour limiter la taille modifier le php.ini, si tu es sous
Linux ou BSD c'est un fichier qui est dans le répertoire des configs c'est
à dire /etc, chez moi il est là : /etc/php5/cgi/php.ini mais comme tu as
sans doute php en module apache il est sans doute dans un autre répertoire
de /etc/ pour le trouver tu fais
find /etc -name "php.ini"
dans une console.

Je ne sais pas si l'on peut avoir la taille du fichier à envoyer avant de
l'envoyer, du moins du côté php, sans doute javascript pourrait t'envoyer
l'info côté client pour éviter de lancer tout le bazard si c'est voué à
échouer.

Je t'avais répondu de façon rapide ne sachant pas l'habitude que tu avais de
php. C'était pour te donner une idée générale des vérifs à faire. Et après
la réponse de Dominique, il faudrait remplacer mes bidouillages binaires
par le contôle des infos exim.

Sinon l'upload en php renvoit un tableau de données, comme tu le verras dans
la page que je t'indique. C'est ce qui te permet le traitement à la
réception.

Du coup il vaut peut-être mieux que tu essayes de pondre ton code toi même
si tu veux comprendre. Ma classe est un peu compliquée, elle fait d'autres
trucs comme tatouer l'image avec GD etc. et elle fait appel à des fichiers
de configuration externe car elle n'a pas été pensée pour être distribuée
hors de l'appli. Je veux bien te l'envoyer en privé (c'est gros), mais je
ne sais pas si mon code est assez propre pour des visées pédagogiques !

Bon courage et dis-nous la suite
SAM
2009-10-05 13:49:25 UTC
Permalink
Post by Alarch
Post by SAM
Ha! j'ai oublié de dire qu'il serait bien que je connaisse (d'avance ?)
le poids du fichier. Free semble n'autoriser que 2Mo en upload.
De laisser envoyer 2Mo pour que l'upload errorise ce n'est pas sympa
pour l'expéditeur.
[snip]
Post by SAM
Merci.
Ne me reste qu'à comprendre comment on s'en sert ;-)
(je suis archi neuneu en php)
Ben tout le monde débute un jour,
Ça doit faire au moins 5 sinon 8 ans que je débute.
À chaque fois que je tente qque chose ça merdouille immanquablement.
Je tente un peu de dépatouiller la chose et devant la complexité du PHP,
le nombre de façons d'aborder le blème, les confusions des manuels en
lignes et commentaires associés (en pas fr ceux-là) je laisse en général
tomber, jusqu'à la prochaine idée (de 6 mois à 1 an).
Post by Alarch
à chaque fois qu'Olivier me répond c'est une page du manuel que
j'avais loupée,
Oh! Ce n'est pas parce que j'ai vu la page que j'ai compris comment m'en
servir ou que ça n'a pas kkbouillé encore pire ;-)
Post by Alarch
Déjà tu devrais lire en détail cette page et celles qui en dépendent.
http://fr.php.net/manual/fr/features.file-upload.php
Houlala !
Mais mon pôvre, ça doit bien faire 15 fois que je la regarde ;-)
Mais ils commencent par $_FILES['lefichier']
qui, chez moi, capote ... (au moins pour certaines de mes photos)

Je tourne en rond.
Je tourne en rond.
Je ne tourne plus en rond !!! cf tt en bas
Post by Alarch
Première chose pour limiter la taille modifier le php.ini, si tu es sous
Non je n'ai pas accès chez Free à l'ini qui est à 2Mo pour l'upload.
Post by Alarch
Je ne sais pas si l'on peut avoir la taille du fichier à envoyer avant de
l'envoyer, du moins du côté php, sans doute javascript pourrait t'envoyer
l'info côté client pour éviter de lancer tout le bazard si c'est voué à
échouer.
Non, JavaScript ne peut pas faire ça.
Et puis ce n'est pas + sérieux que d'accepter le fichier tel quel.
Post by Alarch
Sinon l'upload en php renvoit un tableau de données, comme tu le verras dans
la page que je t'indique. C'est ce qui te permet le traitement à la
réception.
Je veux bien te l'envoyer en privé (c'est gros), mais je
ne sais pas si mon code est assez propre pour des visées pédagogiques !
J'ai trouvé un truc qui me semble pas mal fait :
<http://www.miasmatech.net/scripts/upload/upload.php>
tant pour la qualité des vérifs que pour la pédagogie :
<http://www.miasmatech.net/scripts/article/article_content.php?article_id=2>
(je crois que je vais commencer à comprendre ce que classe veut dire)

mais le truc est pour PHP.5
me reste à trouver pour PHP.4
Post by Alarch
Bon courage et dis-nous la suite
Pour l'heure, rien de nouveau!

Le code :
print_r($_FILES['fichier']);
me donne :
Array
(
[name] => IMG_0647.JPG
[type] =>
[tmp_name] =>
[error] => 1
[size] => 0
)

et :
$mesg = 'Erreur! ';
$err = $_FILES['fichier']['error'];
switch($err) {
case 0: $mesg.='0 = tout est OK';
break;
case 1: $mesg.='1. Le fichier téléchargé excède la taille de
upload_max_filesize, configurée dans le php.ini.';
break;
case 2: $mesg.='2. Le fichier téléchargé excède la taille de
MAX_FILE_SIZE, qui a été spécifiée dans le formulaire HTML. ';
break;
case 3: $mesg.='3. Le fichier n\'a été que partiellement téléchargé.';
break;
case 4: $mesg.='4. Aucun fichier n\'a été téléchargé.';
break;
case 6: $mesg.='6. Un dossier temporaire est manquant. Introduit en
PHP 4.3.10 et PHP 5.0.3.';
break;
case 7: $mesg.='7. Échec de l\'écriture du fichier sur le disque.
Introduit en PHP 5.1.0.';
break;
case 8: $mesg.='8. L\'envoi de fichier est arrêté par l\'extension.
Introduit en PHP 5.2.0.';
break;
}
echo '<p>'.$mesg.'</p>';

Me donne :
Erreur! 1. Le fichier téléchargé excède la taille de
upload_max_filesize, configurée dans le php.ini.

Arrrggghhhh !
Éclair de génie (si, si !).
Après avoir combattu mon blocage sur les absents du $_FILES,
j'ai quand même vérifié l'ini de mon PHP ... l'upload y était limité là
aussi à 2Mo :-(
Passé à 6Mo, c'est maintenant OK, mes photos sont correctement analysées
par $_FILES

Ils pourraient tt de même prévenir que ['error'] peut cacher le reste ! :-(


S'cusez pour le dérangement.
Mébon, j'ai un peu du mal avec la philosophie PHP.
--
sm
Alarch
2009-10-05 16:01:30 UTC
Permalink
Post by SAM
Erreur! 1. Le fichier téléchargé excède la taille de
upload_max_filesize, configurée dans le php.ini.
Ben oui si il le dit ! Même si chez Free on ne peut pas le changer on doit
pouvoir le connaître.
Post by SAM
Arrrggghhhh !
Éclair de génie (si, si !).
Après avoir combattu mon blocage sur les absents du $_FILES,
j'ai quand même vérifié l'ini de mon PHP ... l'upload y était limité là
aussi à 2Mo :-(
Passé à 6Mo, c'est maintenant OK, mes photos sont correctement analysées
par $_FILES
Ils pourraient tt de même prévenir que ['error'] peut cacher le reste ! :-(
Il me semble que dans ton cas ['error'] ne cachait rien mais au contraire
contenait les bonnes réponses non ?

Extrait de la doc :
"La variable MAX_FILE_SIZE ne peut pas spécifier une taille de fichier plus
grande que la taille qui a été fixée par **upload_max_filesize**, dans le
**php.ini**. La valeur par défaut est 2 megaoctets.
Si une limite de mémoire est activée, une plus grande valeur de
memory_limit peut être nécessaire. Assurez-vous d'avoir défini une valeur
pour memory_limit assez grande.
Si la valeur de max_execution_time est trop petite, le temps d'exécution du
script peut excéder cette valeur. Assurez-vous d'avoir défini une valeur
pour max_execution_time assez grande."

Donc c'est bien dans php.ini qu'il faut commencer par mettre son nez...

et puis les erreurs détaillées ici :

http://fr.php.net/manual/fr/features.file-upload.errors.php
Post by SAM
S'cusez pour le dérangement.
Mébon, j'ai un peu du mal avec la philosophie PHP.
Là je ne sais pas si c'est vraiment une question de philosophie Php ça. Mais
tant mieux si ça marche.
SAM
2009-10-07 08:32:44 UTC
Permalink
Post by Alarch
Post by SAM
Erreur! 1. Le fichier téléchargé excède la taille de
upload_max_filesize, configurée dans le php.ini.
Ben oui si il le dit ! Même si chez Free on ne peut pas le changer on doit
pouvoir le connaître.
Oui, on le connait (je l'avais précisé de presqu'entrée de jeu).
C'est même mon 2è principal soucis.
Post by Alarch
Post by SAM
Arrrggghhhh !
Éclair de génie (si, si !).
Après avoir combattu mon blocage sur les absents du $_FILES,
J'ai touj des blocages comme ça en PHP, je n'arrive pas bien à en
démêler les ficèles qui sont vraiment bien emberlificotées.
Post by Alarch
Post by SAM
j'ai quand même vérifié l'ini de mon PHP ... l'upload y était limité là
aussi à 2Mo :-(
Passé à 6Mo, c'est maintenant OK, mes photos sont correctement analysées
par $_FILES
Ils pourraient tt de même prévenir que ['error'] peut cacher le reste ! :-(
Il me semble que dans ton cas ['error'] ne cachait rien mais au contraire
contenait les bonnes réponses non ?
Non juste une, les autres à vide.
Que l'on tourne ça comme l'on veut, en cas d'erreur il semblerait que
les autres items de $_FILES (sauf le nom d'origine) ne sont plus
relevés/communiqués.
Et ... bêtement (maintenant que je crois avoir capté) je voulais tt de
même obtenir ces renseignements. Le truc-bidulle m'enduisant d'erreur et
me faisant croire que j'avais un pb avec les fichiers.
Post by Alarch
"La variable MAX_FILE_SIZE ne peut pas spécifier une taille de fichier plus
grande que la taille qui a été fixée par **upload_max_filesize**, dans le
**php.ini**. La valeur par défaut est 2 megaoctets.
Boudiou! je n'ai peut-être pas lu/retenu tte la doc ! ;-)
C'est où ?
Post by Alarch
Si une limite de mémoire est activée, une plus grande valeur de
memory_limit peut être nécessaire. Assurez-vous d'avoir défini une valeur
pour memory_limit assez grande.
Ha ben non ça j'ai pas fait non plus. Qd même, si l'upload est limité
par ini, la mémoire doit bien en être avertie, non ? Qu'est-ce que c'est
que ces systèmes assistés ?!
Post by Alarch
Si la valeur de max_execution_time est trop petite, le temps d'exécution du
script peut excéder cette valeur. Assurez-vous d'avoir défini une valeur
pour max_execution_time assez grande."
Donc c'est bien dans php.ini qu'il faut commencer par mettre son nez...
Sauf qu'au final je n'aurai pas la main sur ce dernier.
Post by Alarch
http://fr.php.net/manual/fr/features.file-upload.errors.php
C'est bien en testant l'erreur que j'ai eu la solution (l'éblouissement).
Post by Alarch
Post by SAM
S'cusez pour le dérangement.
Mébon, j'ai un peu du mal avec la philosophie PHP.
Là je ne sais pas si c'est vraiment une question de philosophie Php ça. Mais
tant mieux si ça marche.
Si je comprends bien, le PHP c'est tout simple mais si on veut que ça
fonctionne un peu il en faut 300 lignes juste pour mettre une photo sur
un site.
Et surtout on n'est pas aidé par tous les exemples fournis sur les
"sites d'aides" et qui ne sont pas satisfaisants (sinon même dangereux).

Bon, dès que j'ai un peu avancé avec mon machin, je viendrai le
soumettre à votre sagacité (en espérant que je n'aurai pas plus de 30
lignes)(va falloir écrire petit !)


Une question :
les vérifications par exif on les fait sur le fichier temporaire ?

Une autre :
je ne me souviens plus comment on explique au php.ini
que l'on veut les raccourcis
<? au lieu de <?php
et
<?= au lieu de <?php echo
--
sm
Dominique Ottello
2009-10-04 13:12:17 UTC
Permalink
Post by SAM
Avec quoi comparer $ext_img pour s'assurer que l'image est bien du JPG,
du GIF, du PNG (pour les choix de post-traitements) ?
Utiliser exif_imagetype()
Documentation ici :
http://fr2.php.net/manual/fr/function.exif-imagetype.php
--
Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Technologie aéronautique : http://aviatechno.free.fr (http://ottello.net)
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr
Alarch
2009-10-04 15:21:35 UTC
Permalink
Post by Dominique Ottello
Post by SAM
Avec quoi comparer $ext_img pour s'assurer que l'image est bien du JPG,
du GIF, du PNG (pour les choix de post-traitements) ?
Utiliser exif_imagetype()
http://fr2.php.net/manual/fr/function.exif-imagetype.php
encore une fonction que j'avais ratée ! Je vais essayer ça tout de suite
tiens.
Thibault Jouan
2009-10-07 23:59:04 UTC
Permalink
Salut,
Post by SAM
Soit un formulaire avec un champ file nommé 'photo'
Je veux vérifier que c'est bien une image qui est envoyée
[…]
Post by SAM
Quelle autre soluce pourrait assurer que le fichier uploadé est bien une
image ?
Sauf erreur de ma part Fileinfo n'a pas encore été cité
(http://fr.php.net/fileinfo), c'est une bonne alternative et
fonctionne sur beaucoup de type de fichiers. La méthode est la même
que celle proposé par Alarch.

Sinon (en plus lourd) on peut aussi appeler la commande file avec
l'option -i sur le fichier pour avoir le type mime.
--
Thibault Jouan
A13 http://a13.fr/
+33 6 28 25 39 00
Alarch
2009-10-08 10:44:59 UTC
Permalink
Post by Thibault Jouan
Salut,
Post by SAM
Soit un formulaire avec un champ file nommé 'photo'
Je veux vérifier que c'est bien une image qui est envoyée
[…]
Post by SAM
Quelle autre soluce pourrait assurer que le fichier uploadé est bien une
image ?
Sauf erreur de ma part Fileinfo n'a pas encore été cité
(http://fr.php.net/fileinfo), c'est une bonne alternative et
fonctionne sur beaucoup de type de fichiers. La méthode est la même
que celle proposé par Alarch.
Sinon (en plus lourd) on peut aussi appeler la commande file avec
l'option -i sur le fichier pour avoir le type mime.
Encore une fonction que j'avais loupée... J'ai sans doute réinventé l'eau
tiède... je testerai, ça me semble mieux que les infos exim, qui n'existent
pas toujours.

Continuer la lecture sur narkive:
Loading...