Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
akazerty
Inscrit le: 10 Mai 2004 Messages: 7
|
Posté le: Lun Mar 07, 2005 23:22 Sujet du message: fonction getimagesize() |
|
|
Bonjour à tous,
Voila j'ai créée sur mon site un système d'album photo pour chacun de mes membres, mais lors de l'envois de l'image, je réalise plusieurs vérification comme l'extension du fichier ou encore la dimension de l'image. Mais lors de cette derniere vérification, j'utilise la fonction getimagesize("$_FILES['fichier']['tmp_name']") qui va me donner la largeur et hauteur de l'image, cela marchait en local mais lors du passage sur le net, cela m'indique que je n'es pas les droits necessaire sur les fichiers temporaire. Comment puis-je donc vérifier la dimension avant que celle-ci soit envoyé sur le serveur?
merci d'avanc epour vos réponse et bonne fin de soirée |
|
Revenir en haut de page |
|
|
Calao
Inscrit le: 20 Jan 2004 Messages: 442 Localisation: Bruxelles (Jette)
|
Posté le: Mar Mar 08, 2005 00:28 Sujet du message: |
|
|
tu l'envoies sur le serveur, tu vérifies et si c'est pas bon tu l'effaces, mais en plus à la sécurité serveur, rajoute un petit javascript qui teste du côté client pour éviter de devoir uploader l'image si c'est pas bon.
Dans ce cas il l'uploadera uniquement si l'image est valide ou si le javascript est désactivé. _________________ Calao - www.slaceblog.be |
|
Revenir en haut de page |
|
|
akazerty
Inscrit le: 10 Mai 2004 Messages: 7
|
Posté le: Mar Mar 08, 2005 20:27 Sujet du message: |
|
|
oui je voudrais faire mes vérifications avant d'uploader sur le serveur pour une question de sécurité mais si la personne n'accepte pas les javascript alors un executable pourrait etre envoyé sans probleme aussi, désolé je débute dans l'upload de fichier |
|
Revenir en haut de page |
|
|
eurower Site Admin
Inscrit le: 03 Jan 2002 Messages: 1458 Localisation: Lyon
|
Posté le: Mer Mar 09, 2005 00:58 Sujet du message: |
|
|
On peut voir le script correspondant ?
L'upload est oki sur le serveur !
Si vuos faites un move_upload après, il faut que le répertoire de destination ai les bons droits ! _________________ Modérateur des forums
Président de l'association
Hébergement eurower.net
Association loi 1901 |
|
Revenir en haut de page |
|
|
Calao
Inscrit le: 20 Jan 2004 Messages: 442 Localisation: Bruxelles (Jette)
|
Posté le: Mer Mar 09, 2005 02:23 Sujet du message: |
|
|
le truc c'est que tu dois d'abord uploader ton fichier sur le serveur dans ton répertoire et ensuite tester à partir de la position uploadée.
Rappel getimagesize() à besoin d'un chemin complet (http://tondomaine.truc/rep/fichier) ensuite si c'est pas bon tu l'efface du serveur et tu retourne à ton script avec un petit message d'erreur.
Par contre pour le type du fichier tu peux tester à partir de la position temporaire. _________________ Calao - www.slaceblog.be |
|
Revenir en haut de page |
|
|
akazerty
Inscrit le: 10 Mai 2004 Messages: 7
|
Posté le: Mer Mar 09, 2005 19:50 Sujet du message: |
|
|
En fait j'ai créé une fonction dont voici le code
Code: | function upload($file_taille_max,$max_width,$max_height,$dossier_destination){
if($dossier_destination=="" || !is_dir($dossier_destination)){
echo "dossier de destination non renseigné ou inexistant";
exit();
}
if (isset($_FILES['fichier']) && is_array($_FILES['fichier'])){
if(isset($_FILES['fichier']['error']))$fichier_error = $_FILES['fichier']['error']; else{echo 'probleme de configuration 3',exit();}
if(!empty($fichier_error)){
switch ($fichier_error){
case 1:
echo"<span class=texteRUBRIQUE>Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !</span><br>";
break;
case 3:
echo "<span class=texteRUBRIQUE>L'envoi du fichier a été interrompu pendant le transfert !</span><br>";
break;
case 4:
echo "<span class=texteRUBRIQUE>Le fichier que vous avez envoyé a une taille nulle !</span><br>";
break;
}exit();
}else{
if(!empty($_FILES['fichier']['name']))$fichier_name=$_FILES['fichier']['name']; else{echo 'probleme de configuration 1',exit();}
if(!empty($_FILES['fichier']['tmp_name']))$fichier_tmp_name=$_FILES['fichier']['tmp_name']; else{echo 'probleme de configuration 2',exit();}
if(!empty($_FILES['fichier']['size']))$fichier_size=$_FILES['fichier']['size']; else{echo 'probleme de taille fichier',exit();}
if($fichier_size>$file_taille_max){
$file_tailleko_max=$file_taille_max/1000;
echo '<span class=texteRUBRIQUE>taille du fichier supérieur a la limite autorisé : '.$file_tailleko_max.' octets</span><br>'; exit();}
$size = getimagesize("$fichier_tmp_name");
$width=$size[0];
$height=$size[1];
if($width>$max_width){echo "<span class=texteRUBRIQUE>Dimension de l'image supérieur a la limite autorisé : $max_width x $max_height pixels</span><br>"; exit();}
if($height>$max_height){echo "<span class=texteRUBRIQUE>Dimension de l'image supérieur a la limite autorisé : $max_height x $max_width pixels</span><br>"; exit();}
$temp=explode('.',$fichier_name); #
$extension=strtolower($temp[count($temp)-1]); #
$ext_a_modif="(php|php3|php4|php5|htm|html|txt|inc)";
$ext_aut="(jpg|jpeg|gif)";
if(ereg($ext_aut,$extension)){
$name_ss_ext=eregi_replace("[^A-Z0-9]", "",strtolower(strtr(substr($fichier_name, 0, -strlen($extension)-1),"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn")));
$extension='.'.eregi_replace($ext_a_modif,'[\\1]',$extension); #
if(file_exists($dossier_destination."/".$name_ss_ext.$extension)){
$i=0;
while(file_exists($dossier_destination."/".$name_ss_ext."_".$i.$extension))$i++;
$fichier_name=$name_ss_ext."_".$i.$extension;
}else
$fichier_name=$name_ss_ext.$extension;
$res_copy=move_uploaded_file($fichier_tmp_name, $dossier_destination.'/'.$fichier_name);
if($res_copy){
print "<span class=texteRUBRIQUE>Le fichier <b>".$fichier_name."</b>a bien été envoyé et enregistré.</span><br>";
return $fichier_name;
}else{
print "<span class=texteRUBRIQUE>Fichier <tt><b>".$fichier_name."</b></tt> non envoyé.</span><br>";
return 0;
}
}
else{
echo "<span class=texteRUBRIQUE>Seul les extension en .jpeg,.jpg et .gif sont autorisés</span>";
exit();
}
}
}else echo '<span class=texteRUBRIQUE>fichier à uploader non renseigné</span><br>';
} |
|
|
Revenir en haut de page |
|
|
eurower Site Admin
Inscrit le: 03 Jan 2002 Messages: 1458 Localisation: Lyon
|
Posté le: Mer Mar 09, 2005 21:38 Sujet du message: |
|
|
On peut avoir l'erreur retourné par le serveur lors d'un upload ? _________________ Modérateur des forums
Président de l'association
Hébergement eurower.net
Association loi 1901 |
|
Revenir en haut de page |
|
|
akazerty
Inscrit le: 10 Mai 2004 Messages: 7
|
Posté le: Jeu Mar 10, 2005 09:42 Sujet du message: |
|
|
Voila j'aurais du le mettre dès le dbut pour simplifier les choses
Code: |
Warning: getimagesize() [function.getimagesize]: open_basedir restriction in effect. File(/tmp/upload_tmp_dir/php8njLwB) is not within the allowed path(s): (/home/a/akazerty/user/:/usr/local/lib/php/:/home/system/user/www/shared/:/home/system/user/www/www.eurower.net/errors/) in /home/a/akazerty/user/www/info/fonctions.php on line 93
Warning: getimagesize(/tmp/upload_tmp_dir/php8njLwB) [function.getimagesize]: failed to open stream: Operation not permitted in /home/a/akazerty/user/www/info/fonctions.php on line 93
Warning: move_uploaded_file(avatar/images.jpeg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/a/akazerty/user/www/info/fonctions.php on line 117
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/upload_tmp_dir/php8njLwB' to 'avatar/images.jpeg' in /home/a/akazerty/user/www/info/fonctions.php on line 117 |
|
|
Revenir en haut de page |
|
|
akazerty
Inscrit le: 10 Mai 2004 Messages: 7
|
Posté le: Jeu Mar 10, 2005 12:27 Sujet du message: |
|
|
C'est bon j'ai réglké le problème, la fonction getimagesize() ne marche pas sur les fichier temporaire donc j'ai fais comme l'indiquait Calao.
J'ai créé une fonction pour l'upolad puis j'ai recréé une deuxieme fonction vérifiant les dimensions de l'image, si elles sont bonnes, l'adresse de l'image est sauvegardé dans la bdd, sinon l'image est supprimé et un message d'erreur s'affiche.
Maintenant tout marche nikel, merci pour tout |
|
Revenir en haut de page |
|
|
Calao
Inscrit le: 20 Jan 2004 Messages: 442 Localisation: Bruxelles (Jette)
|
Posté le: Jeu Mar 10, 2005 17:39 Sujet du message: |
|
|
Et maintenant c'est bien tu as fait une sécurité côté serveur mais par dessus rajoute une sécurité côté client pour le confort de l'utilisateur, cela ménagera le serveur et fera d'autant plus plaisir aux utilisateurs de ne pas devoir attendre le chargement de la page pour leur dire qu'il y a une erreur.
Pour cela tu le sais surement mais javascript fera l'affaire. _________________ Calao - www.slaceblog.be |
|
Revenir en haut de page |
|
|
eurower Site Admin
Inscrit le: 03 Jan 2002 Messages: 1458 Localisation: Lyon
|
Posté le: Jeu Mar 10, 2005 18:43 Sujet du message: |
|
|
Puis bon, l'erreur est explicite la !
Impossible d'ouvrir un fichier dans /tmp, c'est écris :-s _________________ Modérateur des forums
Président de l'association
Hébergement eurower.net
Association loi 1901 |
|
Revenir en haut de page |
|
|
|