Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1341 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  probleme de verification de poid d'un fichier en php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de verification de poid d'un fichier en php

n°1225957
jj59
Posté le 19-10-2005 à 10:38:14  profilanswer
 

bonjour,  
j'ai un petit probleme concernant la verification du poin d'un fichier en PHP
 
voici mon code :
 
if($HTTP_POST_FILES['fichier']['size']>2097152)
{
            echo "Le poid du fichier est trop important, il ne doit pas dépasser 2Mo  
}
 
PS: la variable "fichier" existe bien
 
Lorsque que la taille du fichier est superieur a 2Mo, la page ne s'affiche pas (Impossible d'afficher la page) alors que si la taille est inferieur a 2Mo, tout se passe bien
 
merci pour l'aide

mood
Publicité
Posté le 19-10-2005 à 10:38:14  profilanswer
 

n°1225970
dwogsi
Défaillance cérébrale...
Posté le 19-10-2005 à 10:44:09  profilanswer
 

Ca doit venir du timeout du navigateur.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1225973
jj59
Posté le 19-10-2005 à 10:45:07  profilanswer
 

c a d ??

n°1225976
dwogsi
Défaillance cérébrale...
Posté le 19-10-2005 à 10:48:00  profilanswer
 

Bah quand tu veux accéder à une page, ton navigateur déclenche un compteur de temps, quand un certain temps est dépassé alors le chargement est arrêté et message "impossible d'afficher la page". Quand tu envois un fichier, il compte le temps d'envois dans le temps de chargement de la page.
 
Le sujet avais déjà été traité, soit dit en passant...


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1225999
jj59
Posté le 19-10-2005 à 11:04:24  profilanswer
 

ok
 
Et ya t'il moyen de changer ce timeout avec le php ou pour detourner le probleme ?
 
merci pour ton aide

n°1226013
dwogsi
Défaillance cérébrale...
Posté le 19-10-2005 à 11:19:40  profilanswer
 

Pas à ma connaissance non. Mais comme je te l'ais dit ca a déjà été traité sur le forum et si je me souviens bien ca avais données quelques solutions, donc une petite recherche s'impose.
 
Voilà c'est tout ce que je sais à ce propos.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1226022
j_lecruel
☀ ☁ ☂
Posté le 19-10-2005 à 11:24:30  profilanswer
 

Salut,
 
tu as la fonction set_time_limit pour définir le temps d'exécution max. du script. Cependant je sais pas si ça fonctionnera pour l'upload de fichiers, et dans tout les cas si PHP tourne en Safe mode cette fonction n'a aucun effet.


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
n°1226025
dwogsi
Défaillance cérébrale...
Posté le 19-10-2005 à 11:26:08  profilanswer
 

Mais il ne s'agit pas d'un timeout venant de php... Tant que le fichier n'est pas complétement envoyé, le script n'est pas interprété! T'as lu tout le topic?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1226030
Xav_
The only one...
Posté le 19-10-2005 à 11:29:11  profilanswer
 

ben j'avais des pb sur l'upload de fichier trop lourd, et avec un ini_set php ça m'a régler le pb

Code :
  1. ini_set('max_execution_time', '120');


 
par contre faut que ton hébergeur t'autorise à modifierr cette valeur, ce qui n'est pas tjs le cas

n°1226034
Xav_
The only one...
Posté le 19-10-2005 à 11:31:39  profilanswer
 

et aussi le controle PHP est bien en effet pour le poid du fichier, mais tu peux en plus mettre un champs hidden dans ton form qui porte le nom "MAX_FILE_SIZE" avec et avec une valeur en octet


Message édité par Xav_ le 19-10-2005 à 11:32:27

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
mood
Publicité
Posté le 19-10-2005 à 11:31:39  profilanswer
 

n°1226088
jj59
Posté le 19-10-2005 à 12:31:54  profilanswer
 

ton idée avec le hidden me semble correcte, mais je n'arrive pas a la mettre en place:
 
j'ai bien ajouter un  
 
<input type="hidden" name="MAX_FILE_SIZE" value="2097152" />
 
dans mon form
 
et ensuite je fait un  
 
if(!is_uploded_file($HTTP_POST_FILE['fichier']['tmp_name']))
{
            echo "Le poid du fichier est trop important, il ne doit pas dépasser 2Mo"
}
 
mais j'ai toujours le meme probleme

n°1226095
dwogsi
Défaillance cérébrale...
Posté le 19-10-2005 à 12:37:22  profilanswer
 

jj59 a écrit :

mais j'ai toujours le meme probleme


dwogsi a écrit :

Ca doit venir du timeout du navigateur.


Je maintiens...


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1226109
jj59
Posté le 19-10-2005 à 12:52:10  profilanswer
 

j'ai ajouter le :
 
ini_set('max_execution_time', '120');
 
au debut de mon code mais cela ne change rien

n°1226113
dwogsi
Défaillance cérébrale...
Posté le 19-10-2005 à 12:55:33  profilanswer
 

Bah c'est bien ce que je dis, ca vient pas de php... :o


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1226117
jj59
Posté le 19-10-2005 à 12:58:50  profilanswer
 

il n'y a donc aucun moyen de remedier a ce probleme ??

n°1226142
dwogsi
Défaillance cérébrale...
Posté le 19-10-2005 à 13:37:16  profilanswer
 

Pas a ma connaissance.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1226213
shakpana
des fois, j'me demande ...
Posté le 19-10-2005 à 14:19:48  profilanswer
 

max_execution_time
cette valeur n'inclut pas le temps d'upload ... que l'on upload 1 octet ou 1 000 000 ça n'a théoriquement pas d'impact, sauf traitement spécifique sur le fichier après le démarrage du script.
perso j'ai pas de soucis avec la cfg d'upload suivante
max_execution_time 80
max_input_time -1
memory_limit 41M
post_max_size 40M
upload_max_filesize 40M
 
MAX_FILE_SIZE
cette valeur informe le navigateur de la taille max du fichier à envoyer
le navigateur agira en conséquence, s'il décide d'agir
donc peut-être d'afficher "impossible d'afficher la page"
 
timeout du navigateur
bah je ne sais pas ...
ce qui prend du temps c'est l'upload du fichier, donc la requête, or un timeout devrait se calculer à partir du moment où la requête est totalement envoyée ...
je ne vois pas de raisons qui pousserait un navigateur à arrêter la requête parce que celle-ci n'est pas totalement partie ?
"impossible d'afficher la page" c'est pas du ie, ça ? (ceci dit, avec ie on sait jamais)
 
if(!is_uploded_file($HTTP_POST_FILE['fichier']['tmp_name']))
echo "Le poid du fichier est trop important, il ne doit pas dépasser 2Mo"

is_uploaded_file te dis seulement si un certain fichier est un fichier qui a été est uploadé
regardes donc du coté de $_FILES['fichier']['size'] et/ou $_FILES['fichier']['error']  
$_FILES['fichier']['size'] est la seule valeur à croire pour la taille du fichier
 
RTFM
Related Configurations Note: See also the file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size and max_input_time directives in php.ini

n°1226416
jj59
Posté le 19-10-2005 à 17:09:41  profilanswer
 

ini_set('max_execution_time', '120');
ini_set('max_execution_time', '80' );
ini_set('max_input_time' ,'-1');  
ini_set('memory_limit' ,'41');
ini_set('post_max_size' ,'40');
ini_set('upload_max_filesize' ,'40');  
 
j'ai ajouter ça, et sa marche toujours pas

n°1226432
jj59
Posté le 19-10-2005 à 17:28:37  profilanswer
 

j'ai ajouter ceci au debut de mon fichier :
 
ini_set('max_execution_time', '120');
ini_set('max_execution_time', '80' );
ini_set('max_input_time' ,'-1');  
ini_set('memory_limit' ,'41');
ini_set('post_max_size' ,'40');
ini_set('upload_max_filesize' ,'2097152');  
 
puis ceci pour la gestion des differentes erreurs :
 
switch ($HTTP_POST_FILES['fichier']['error'] )  
          {
             case UPLOAD_ERR_INI_SIZE:
                             echo "Le poid du fichier est trop important, il ne doit pas dépasser 2Mo <p></p> Vous allez etre redirigé dans 10 secondes";
                             redirection2();
                             ob_end_flush();
                             break;
             case UPLOAD_ERR_FORM_SIZE:
                             echo "Le poid du fichier est trop important, il ne doit pas dépasser 2Mo <p></p> Vous allez etre redirigé dans 10 secondes";
                             redirection2();
                             ob_end_flush();
                             break;
             case UPLOAD_ERR_PARTIAL:
                             echo "Le fichier a été partiellement uploader<p></p> Vous allez etre redirigé dans 10 secondes";
                             redirection2();
                             ob_end_flush();
                             break;
             case UPLOAD_ERR_NO_FILE:
                             echo "Aucun fichier n'a été uploadé<p></p> Vous allez etre redirigé dans 10 secondes";
                             redirection2();
                             ob_end_flush();
                             break;
             case UPLOAD_ERR_NO_TMP_DIR:
                             echo "Probleme de fichier temporaire<p></p> Vous allez etre redirigé dans 10 secondes";
                             redirection2();
                             ob_end_flush();
                             break;
             default:
                             echo "Une erreur fatale est survenue durant l'upload<p></p> Vous allez etre redirigé dans 10 secondes";
                             redirection2();
                             ob_end_flush();
                             break;
          }
 
et enfin dans mon formulaire j'ai laisser le  
 
<input type="hidden" name="MAX_FILE_SIZE" value="2097152" />  
 
mais toujour le meme probleme: QUE FAIRE ??????????????
 
merci pour votre aide

n°1226454
shakpana
des fois, j'me demande ...
Posté le 19-10-2005 à 17:54:45  profilanswer
 

jj59 a écrit :

j'ai ajouter ça, et sa marche toujours pas


sa marche toujours pas koi ? (si si, en français dans le texte)
edit : t'a essayer un autre navigateur, pour cette sombre histoire de timeout ???

Code :
  1. $xyz = "40M"; // ou même (int)41000000
  2. ini_set('post_max_size' , $xyx);
  3. ini_set('upload_max_filesize' , $xyz);


ça, je l'ai jamais fait tourné ni sur un PHP en module Apache ni en CGI ... jamais réussi
donc au final .htaccess pour le PHP en module Apache, et pour le CGI dans l'os sans php.ini perso


Message édité par shakpana le 19-10-2005 à 17:55:45
n°1226623
jj59
Posté le 19-10-2005 à 20:22:31  profilanswer
 

que veu dire CGI stp ??
 

n°1226729
shakpana
des fois, j'me demande ...
Posté le 19-10-2005 à 23:33:34  profilanswer
 

jj59 a écrit :

que veu dire CGI stp ??


pour faire simple, et sans rentrer dans le débat CGI vs Module :
module Apache : PHP est executé dans le contexte du serveur Apache, via (donc) un module d'Apache
CGI : Common Gateway Interface - PHP est appelé "directement" par Apache, hors contexte du serveur Apache
 
ce qui veut dire qu'en module, PHP bénéficit d'informations fournis par le serveur Apache, données inaccessibles lorsqu'il tourne en CGI.
 
un exemple parmis d'autres :
des directives de conf. PHP dans un .htaccess n'ont aucun impact sur l'éxecution de PHP en CGI
à l'inverse en module Apache fournira ces directives du .htaccess à PHP
 
une méthode pour savoir ce qu'il en est de ta conf. : phpinfo() et cherche "Server API"

n°1226837
jj59
Posté le 20-10-2005 à 10:06:48  profilanswer
 

merci pour ces exploications ;-)
 
Mais je ne comprend pas pourquoi sa ne marche pas quand je fais un :
 
switch ($HTTP_POST_FILES['fichier']['error'] )  
{
      //traitement des erreurs
}
 
parce que si le fichier depasse, 2Mo , cela devrai generer une erreur de type  
 - UPLOAD_ERR_INI_SIZE ou UPLOAD_ERR_FORM_SIZE
 
et ainsi afficher le message d'erreur. Mais la j'ai mon eternel probleme ("IMPOSSIBLE D'AFFICHER LA PAGE" )
 
PS: je ne fais pas mon site en local et mon herbergeur est free (je sais pas si c'est important de le preciser)
 
merci beaucoup pour l'aide shakpana

n°1227061
Xav_
The only one...
Posté le 20-10-2005 à 13:39:52  profilanswer
 

il semble, d'après ce topic d'un autre forum:
http://www.phpcs.com/forum.v2.aspx?id=323345
 
qu'en effet, c'est free qui bloque la taille maxi d'upload à 2MO...
 
place un phpinfo() sur une de tes page chez free et regarde la valeur du champs "upload_max_filesize" pour voir ;)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1227068
jj59
Posté le 20-10-2005 à 13:48:24  profilanswer
 

En effet, c'est bien limiter a 2Mo. Mais dans ce cas la , il n'y a pas possibilité d'afficher une page d'erreur , plutot que l'horrible pasge "impossible d'afficher la page" ?
 
Ou peut on faire la verification du poid du fichier en javascript pour verifier le poid avant de l'envoyer ?

n°1227069
Xav_
The only one...
Posté le 20-10-2005 à 13:50:22  profilanswer
 

et si tu met le champs hidden dont je t'avais parlé, avec une valeur inférier à 2MO, est-ce que c'est pas lui qui va bloquer AVANT le blocage de chez free ??? (a tester)
dans ce cas, si c'est ton script à toi qui bloque, tu peux gérer l'affichage d'un message d'erreur à ta guise...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1227077
jj59
Posté le 20-10-2005 à 14:02:23  profilanswer
 

sur mon formulaire j'ai mi :
<input type="hidden" name="MAX_FILE_SIZE" value="2086666" />
<input name="fichier" type="file" value="fichier" />
 
et sur ma page de validation :  
 
if(filesize($HTTP_POST_FILES['fichier']['tmp_name']) > $_POST['MAX_FILE_SIZE'])
          {
            echo "Le poid du fichier est trop important, il ne doit pas dépasser 2Mo ";
          }  
 
mais sa ne marche pas
 
et avec le javascript ??

n°1227078
Xav_
The only one...
Posté le 20-10-2005 à 14:05:08  profilanswer
 

depuis quand 2086666 est inférieur à 2000000 ???
t'es sur d'avoir lu ce que j'ai marqué ;)


Message édité par Xav_ le 20-10-2005 à 14:05:20

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1227084
jj59
Posté le 20-10-2005 à 14:08:45  profilanswer
 

1 Ko = 1024 octet et 1Mo = 1024 octet donc 2Mo = 2*1024*1024 octet

n°1227085
jj59
Posté le 20-10-2005 à 14:09:39  profilanswer
 

oups 1Mo = 1024 Ko

n°1227087
Xav_
The only one...
Posté le 20-10-2005 à 14:12:27  profilanswer
 

mouais, c'est bien gentil, mais je suis quasi sur que quand il te dis qu'il bloque à 2MO, il vérife 2000000 octet, essai quand meme avec 1999999 dans le hidden, juste pour voir ;)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1227093
jj59
Posté le 20-10-2005 à 14:15:35  profilanswer
 

j'ai essayé en mettant 2 et sa marche quand meme pas, donc a mon avi free passe au dessu de tout sa

n°1227103
Xav_
The only one...
Posté le 20-10-2005 à 14:28:58  profilanswer
 

ha......... spa cool ça...
ben a part rajouter un pti commentaire au-dessus du bouton d'upload pour avertir de pas choisir un fichier de plus de 2MO, je vois pas trop...
 
en JS, ouais c'est surement faisable, mais par contre c'est pas dans mes compétences :(


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°1227164
j_lecruel
☀ ☁ ☂
Posté le 20-10-2005 à 15:35:41  profilanswer
 

Je pense pas que le bridage de free à 2Mo ait quoi que ce soit à voir avec son "impossible d'afficher la page" ; quand le fichier fait plus de 2Mo ben celui-ci n'est pas uploadé, rien de plus.
 
Edit :  
Quant à la solution en JS je suis pas sur que ce soit faisable... à confirmer (ou infirmer) par quelqun ayant de bonnes connaissances en JS.


Message édité par j_lecruel le 20-10-2005 à 15:36:53

---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
n°1227425
jj59
Posté le 20-10-2005 à 20:05:32  profilanswer
 

je crois que je vais opter pour ta solution Xav. En javascript, je me suis renseigné, et apparament c impossible
 
En tout cas merci beaucoup pour votre aide

n°1243192
bitbox
Posté le 10-11-2005 à 14:29:43  profilanswer
 

Je me suis aussi cassé la tête sur un problème assez similaire. Je dois permettre l'upload d'images vers le serveur, puis redimensionner l'image et la stocker dans une base de données (un grand classique)... Tout se déroulais bien jusqu'à ce que le fichier transféré dépasse un certain volume (dans ce cas ci: 2 MB). Là une erreur php du style "allowed memory exhausted" me narguait continuellement...
 
Après de nombreuses tentatives de résolution du problème (1 semaine !) je suis tombé sur ce forum et j'ai essayé le "truc" de shakpana (ini_set('...', ...)) dans le code php -> sans succès. J'ai ensuite opté pour une autre solution, j'ai créé un fichier .htaccess contenant une seule ligne avec le paramètre suivant:
 
php_value "upload_max_filesize" "5M"
 
Et ça marche !!!
 
Le fichier .htaccess doit être placé sur le serveur dans le même directory (dossier) que le code php qui exécute le transfert de fichier, car il est pris en compte par le serveur (apache) uniquement pour les pages chargées dans le même niveau hiérarchique du serveur (c'est sa destination première, modifier certains paramètres de configuration du serveur pour un niveau hiérarchique spécifique).
 
Pour en savoir plus sur l'utilisation des fichiers .htaccess avec apache:
http://httpd.apache.org/docs/1.3/howto/htaccess.html
 
Bien entendu ceci n'est valable "que" pour les serveurs apache... J'espère que ça aidera ceux qui, comme moi, s'arrachent les cheveux sur un problème de ce type.
 
Bonne chance à tous.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  probleme de verification de poid d'un fichier en php

 

Sujets relatifs
Problème de mémoire entre hébergementProbleme de <Input> avec du JAVA
Problème de suppression de données[RESOLU] [FORMULAIRE] probleme de récup des données
Problème d'insertion[résolu] lecture des informations d'un fichier
Problème avec déclaration des variables.Problème avec switch - case.
Affecter une icone à un type de fichier en batchInsérer fichier dans table sql
Plus de sujets relatifs à : probleme de verification de poid d'un fichier en php


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR