probleme de verification de poid d'un fichier en php

probleme de verification de poid d'un fichier en php - PHP - Programmation

Marsh Posté le 19-10-2005 à 10:38:14    

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

Reply

Marsh Posté le 19-10-2005 à 10:38:14   

Reply

Marsh Posté le 19-10-2005 à 10:44:09    

Ca doit venir du timeout du navigateur.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 19-10-2005 à 10:45:07    

c a d ??

Reply

Marsh Posté le 19-10-2005 à 10:48:00    

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})/
Reply

Marsh Posté le 19-10-2005 à 11:04:24    

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

Reply

Marsh Posté le 19-10-2005 à 11:19:40    

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})/
Reply

Marsh Posté le 19-10-2005 à 11:24:30    

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
Reply

Marsh Posté le 19-10-2005 à 11:26:08    

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})/
Reply

Marsh Posté le 19-10-2005 à 11:29:11    

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

Reply

Marsh Posté le 19-10-2005 à 11:31:39    

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
Reply

Marsh Posté le 19-10-2005 à 11:31:39   

Reply

Marsh Posté le 19-10-2005 à 12:31:54    

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

Reply

Marsh Posté le 19-10-2005 à 12:37:22    

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})/
Reply

Marsh Posté le 19-10-2005 à 12:52:10    

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

Reply

Marsh Posté le 19-10-2005 à 12:55:33    

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})/
Reply

Marsh Posté le 19-10-2005 à 12:58:50    

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

Reply

Marsh Posté le 19-10-2005 à 13:37:16    

Pas a ma connaissance.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 19-10-2005 à 14:19:48    

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

Reply

Marsh Posté le 19-10-2005 à 17:09:41    

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

Reply

Marsh Posté le 19-10-2005 à 17:28:37    

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

Reply

Marsh Posté le 19-10-2005 à 17:54:45    

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
Reply

Marsh Posté le 19-10-2005 à 20:22:31    

que veu dire CGI stp ??
 

Reply

Marsh Posté le 19-10-2005 à 23:33:34    

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"

Reply

Marsh Posté le 20-10-2005 à 10:06:48    

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

Reply

Marsh Posté le 20-10-2005 à 13:39:52    

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
Reply

Marsh Posté le 20-10-2005 à 13:48:24    

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 ?

Reply

Marsh Posté le 20-10-2005 à 13:50:22    

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
Reply

Marsh Posté le 20-10-2005 à 14:02:23    

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 ??

Reply

Marsh Posté le 20-10-2005 à 14:05:08    

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
Reply

Marsh Posté le 20-10-2005 à 14:08:45    

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

Reply

Marsh Posté le 20-10-2005 à 14:09:39    

oups 1Mo = 1024 Ko

Reply

Marsh Posté le 20-10-2005 à 14:12:27    

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
Reply

Marsh Posté le 20-10-2005 à 14:15:35    

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

Reply

Marsh Posté le 20-10-2005 à 14:28:58    

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
Reply

Marsh Posté le 20-10-2005 à 15:35:41    

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
Reply

Marsh Posté le 20-10-2005 à 20:05:32    

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

Reply

Marsh Posté le 10-11-2005 à 14:29:43    

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed