Bug sur move_uploaded_file()... (gros fichiers)

Signaler
Messages postés
9
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
18 juillet 2006
-
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
-
Bonjour,

j'ai apparemment un bug sur un script de move_uploaded_file()...
sur de gros fichiers, mon script (voir en dessous) ne marche pas. Il ne fait pas de vérification de nom, extension, ... j'ai testé avec des variables de test (affichage de valeurs)... et lorsque je lance le script (bouton), mon navigateur cherche un peu et puis me renvoie le formulaire vide...

Si quelqu'un a une idée...

Merci d'avance...

voici mon script :



PHP:
,

----


if ((isset(
$_POST
[
"MM_insert"
])) && (
$_POST
[
"MM_insert"
] == 
"form1"
)) {

$taille_max 
= 
100000
;
    if (
filesize
(
$_FILES
[
'image'
][
'tmp_name'
]) > 
$taille_max
) {
    echo 
"bonjour"
;
    }
  if(isset(
$_FILES
[
'image'
])) {
    if(
$_FILES
[
'image'
][
'name'
] != 
""
) {
    
// vérification extension
    
$extension 
= 
strrchr
(
$_FILES
[
'image'
][
'name'
], 
'.'
);
    
// récupère la partie après le .
    // Ex : png
    
$extension 
= 
substr
(
$extension
, 
1
);
    if (
$extension 
!= 
'jpg'
) {
        
$erreur
=
'1'
;
        echo 
"Vous devez sélectionner un fichier jpg"
;
        }
    else {
$erreur 
=
'0'
;}
    
// vérification taille
    
$taille_max 
= 
100000
;
    if (
filesize
(
$_FILES
[
'image'
][
'tmp_name'
]) > 
$taille_max
) {
        echo 
"Votre fichier doit faire moins de 500Ko !"
;
        
$erreur
=
'1'
;}
        else {
$erreur
=
'0'
;}
    
$dest_fichier 
= 
$_FILES
[
'image'
][
'name'
];
    
$dest_fichier 
= 
strtr
(
$dest_fichier
, 
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ'
, 
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'
);
    
// remplacer les caracteres autres que lettres, chiffres et point par _
    
$dest_fichier 
= 
preg_replace
(
'/([^.a-z0-9]+)/i'
, 
'_'
, 
$dest_fichier
);
    
$image 
= 
"../news/"
.
$dest_fichier
;
    
move_uploaded_file
(
$_FILES
[
'image'
][
'tmp_name'
], 
"../news/"
.
$image
);
    } else {
$image 
= 
""
;}
  } else {
$erreur 
=
'0'
;}
  if (
$erreur 
!= 
'1'
) {
  
$insertSQL 
= 
sprintf
(
"INSERT INTO news (texte_news, image_news) VALUES (%s, %s)"
,
                       
GetSQLValueString
(
$_POST
[
'texte_news'
], 
"text"
),
                       
GetSQLValueString
(
$image
, 
"text"
));
  
mysql_select_db
(
$database_gramofone
, 
$gramofone
);
  
$Result1 
= 
mysql_query
(
$insertSQL
, 
$gramofone
) or die(
mysql_error
());
  
$insertGoTo 
= 
"news.php"
;
  if (isset(
$_SERVER
[
'QUERY_STRING'
])) {
    
$insertGoTo 
.= (
strpos
(
$insertGoTo
, 
'?'
)) ? 
"&" 
: 
"?"
;
    
$insertGoTo 
.= 
$_SERVER
[
'QUERY_STRING'
];
  }
  
header
(
sprintf
(
"Location: %s"
, 
$insertGoTo
));
  } else {
  
$tampon
=
$_POST
[
'texte_news'
];
  }
} 

2 réponses

Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
sans regarder le code ni quoique ce soit
rien que upload et gros fichier me font dier que c'est tout a fait normal
en effet moi aussi j'avais eu le meme problème pour un projet que j'avais du realiser
c'est surement parce que ta variable du serveur max_execution_time est a 30
en gros sa veut dire que si ton script na pa envoyer d'information au serveur durant les 30 premiere seconde il dit que la page n'existe pas
donc ce qu'il ce passe c'est que comme tu upload en + de 30 seconde pendant l'upload tons cript ne communique pas avec le serveur donc il croi que ta page n'existe pas

je croi qu'il y a des script sur phpcs qu'il regle ce problème en decoupant le zip lors de l'upload et en le recollant une fois sur le serveur un truc du style
fait des recherche tu trouvera ton bonheure
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
a oui aussi c'est pas top la façon de récupérer les extension
je t'explique pourquoi
tu recupere les lettre apres le point
hors si mon fichier sapel
fichier.ext1.jpg
sa va récuperer ext1.jpg donc sa sera inconnu
ensuite je ne sait pas si ton scriipt d'upload sera utilisable par les internaute mais un jpg n'est pas forcement un jpg :)
en effet
si je creer un fichier php avec tu code mechant bhouuu :)
et ke le .php je le transforme en .jpg
docn script va l'accepter mais a la base sa reste un fichier text ki sera analyser par ton serveur !! aille aille aille :/

je te conseille de verifier les header
exemple
$_FILE['ta_var']['type']
une image jpg donnera image/pjpeg
c'est une verification beaucoup plus sur