Pb php : ImageCreateFromJPEG

Trascal Messages postés 12 Date d'inscription jeudi 18 mars 2004 Statut Membre Dernière intervention 21 juillet 2004 - 6 juil. 2004 à 11:24
isidor91 Messages postés 1 Date d'inscription dimanche 6 juin 2004 Statut Membre Dernière intervention 10 juillet 2004 - 10 juil. 2004 à 00:53
/*
Bijour,
j'ai un ti pb en php :/ quelqu'un pourrait-il m'aider? voici mon pb

$donnees est de type "fichier.jpg"
et $directory est un répertoire que l'ont utilise dans la suite de la fonction
*/

function redimension($donnees,$directory)
{

$repository="../medias/grd/";
$fichier=$repository.$donnees;

$type=strtolower(strstr($fichier,"."));
if ($type==".jpg")
{
$image = ImageCreateFromJPEG($fichier);
}

$largeur = ImageSX($image) ;
$hauteur = ImageSY($image) ;
$new_largeur=150;
$new_hauteur=120;

$timbre = ImageCreate($new_largeur,$new_hauteur);
ImageCopyResized($timbre,$image,0,0,0,0,$new_largeur,$new_hauteur,$largeur,$hauteur);

// suite de la fonction

}

/*
Cette fonction fonctionne bien lorsque $repository est de type "media/grd/" mais des que l'on insère les ".." pour aller dans le directory precedent dans l'arborescence il ne passe plus */

Erreur :

Warning: imagesx(): supplied argument is not a valid Image resource in mapage.php on line 40

Warning: imagesy(): supplied argument is not a valid Image resource in mapage.php on line 41

Warning: imagecopyresized(): supplied argument is not a valid Image resource in mapage.php on line 46

Est-il possible que j'accede a ce repertoire "../medias/grd/" sachant qu'il est impossible (point de vu sécurité) de mettre ma page php dans le dossier media ?

Merci beaucoup de votre aide.

Trascal

*/

14 réponses

cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
6 juil. 2004 à 11:46
hehe mais c normal ! c'est l'utilisation de ta fonction strstr qui n'est pas bonne.

en fait avec cette fonction tu coupes ta chaine à partir de la 1ère occurence de "."

dans ton cas tu devrais utiliser substr (c'est ce que je ferais) comme ca :

$type=strtolower(substr($fichier, -4));


là tu lis les 4 derniers caractères de la chaine.

sinon ton code est très bien ; m'enfin si tu veux + d'inspiration tu peux regarder ce code que j'ai fait :
www.123toto.com</gras>
0
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
6 juil. 2004 à 11:53
autre chose : ne mets jamais de majuscule dans les fonctions que t'as utilisées ici ; elles sont toutes faites pour etre en minuscule.

la preuve ici :
www.123toto.com</gras>
0
Trascal Messages postés 12 Date d'inscription jeudi 18 mars 2004 Statut Membre Dernière intervention 21 juillet 2004
6 juil. 2004 à 12:03
salut Houzéf@,

Merci beaucoup effectivement je n'y avait pas pensé :)
je vais regarder ton code au calme tout à l'heure ;)
et cela change quoi au niveau de la fonction si je rajoute des majuscule a la place des minuscule? je penserai a laisser les fonction en minuscule ;)

bonne journée

Trascal
0
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
6 juil. 2004 à 13:13
pour les minuscules je sais pas si ca peut vraiment perturber l'exécution ; je ne pense pas. mais vu que ces fonctions ont été définies en minuscules, autant toujours laisser les minuscules meme si ca peut paraitre moins lisible.

Houzéf@ - www.123toto.com
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
6 juil. 2004 à 15:55
Pour ce qui est de
$type=strtolower(substr($fichier, -4));, c'est vraiment bête... et les fichiers une extension de 2 caractères ? tu perds une lettre...
Plutot faire
$type=strtolower(substr($fichier,0,strrpos($fichier,".")));


Pour l'appel des fonctions, tu regardes sur www.php.net... si elles sont en minuscule alors tu les déclares en minuscule.
0
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
6 juil. 2004 à 17:19
non ca n'a rien de bete puisque il vérifie uniquement si la fin du nom est ".jpg". donc on se moque des ext à 2 caractères...

Houzéf@ - www.123toto.com
0
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
6 juil. 2004 à 17:22
oh, y veut la fin, bah ca revient au même mais c'est pas bon comme jte dis si l'extension c'est .js mettons

il faut se code :
$type=strtolower(substr($fichier,strrpos($fichier,".")+1));
0
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
6 juil. 2004 à 18:06
le pb c'est que là on veut seulement savoir si c'est ".jpg" donc seuls les 4 derniers caractères comptent et dans ce cas mon code est + rapide que le tien, c tout juste une question de performances (et aussi mon code est + petit).

Houzéf@ - www.123toto.com
0
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
6 juil. 2004 à 18:21
oui mais pas fonctionnel à 100 % !!!!!!!!!!
tu préfères un code qui marche 1 fois sur 2 ou un code qui est un peu plus lent et plus gros (lent c'est relatif la... 0.000000001 sec :P) mais qui fonctionne a tout coup ?
0
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
6 juil. 2004 à 18:28
ce code là marche :
<?php
$chaine="a.j";
echo substr($chaine, -4);
?>

il affiche a.j

donc meme si ya pas 4 caractères ya pas d'erreur... et le test substr($chaine, -4)==".jpg" donnera bien False.

Houzéf@ - www.123toto.com
0
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
6 juil. 2004 à 18:55
ouais ok, mais justement, ton but c'est davoir le type... pas juste .jpg... donc t'utilises un code modulaire qui fit partout !

(je pense que tu n'es pas assez modulaire dans tes codes)
0
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
6 juil. 2004 à 19:09
oui ta raison si jutilise des include avec des fonctions prédéfinies, ta méthode est mieux. mais tas raison moi je fais plus au cas par cas, j'utilise le moins possib d'includes.
d'ailleurs sur mon site les seul include que je fais c'est pour mes infos MySQL et pour une fonction qui parcourt un dossier.

Houzéf@ - www.123toto.com
0
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
6 juil. 2004 à 19:29
Bah c'est pas une bonne idée... moi pour chaque page loadé je fais 1 include qui fait environ 15 includes... tous très modulaire
C'est ca qui faut apprendre en programmant...
0
isidor91 Messages postés 1 Date d'inscription dimanche 6 juin 2004 Statut Membre Dernière intervention 10 juillet 2004
10 juil. 2004 à 00:53
Bonjour,

J'ai un petit soucis, je cherche à faire un script qui liste le contenu du répertoire courant et s'il trouve des images *.gif *.jpg construit des miniatures de ces fichiers.

Mon problème c'est qu'il construit les 2 premières miniatures et le script s'arrête là!!!
Je vois pas de problème de compteur alors si quelqu'un peut me filer un coup de main.
Merci d'avance

Voici le code :

<?
$rep2 = opendir('.');while(false !($filename readdir($rep2)))
{
$arrayfile[]=$filename;
}
$i=0;
$cpt=count($arrayfile);
while($i < $cpt)
{
if($arrayfile[$i] != '..' && $arrayfile[$i] !='.' && $arrayfile[$i] !='')
{
if(is_file($arrayfile[$i]))
{
$nomfile = basename($arrayfile[$i]);
$ext = strtolower(substr($nomfile ,strrpos($nomfile ,".")+1,strlen($nomfile )-strrpos($nomfile ,".")-1));
if($ext=='gif' || $ext=='jpg' || $ext=='jpeg')
{
$Image = $nomfile ;
// on définit le nom de notre miniature
$miniature = "mini_$Image";
// Si l'image miniature existe déjà on la détruit
if(file_exists("./".$miniature))
{
imagedestroy ($miniature );
}
// on impose la taille de la largeur ou de la hauteur de la photo
$ratio = 150;
// on crée une ressource représentant en fait l'image à miniaturiser
$src=imagecreatefromjpeg($Image);
// on récupère les paramètres de notre image
$size =getimagesize($Image);
// on test si la largeur de l'image est supérieur à sa longueur
if ($size[0] > $size[1])
{
// on crée une ressource pour notre miniature
$im=@imagecreatetruecolor (round(($ratio/$size[1])*$size[0]), $ratio);
@imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$size[1])*$size[0]),$ratio, $size[0], $size[1]);
}
else
{
// si la largeur est inférieure ou égale à la hauteur, on entre dans ce cas
// on crée une ressource pour notre miniature
$im=@imagecreatetruecolor (round(($ratio/$size[1])*$size[0]), $ratio);
@imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($size[1]*($ratio/$size[0])), $size[0], $size[1]);
}
ImageJpeg ($im, $miniature);
}
}
}
$i++;
}
unset($arrayfile);
?>
0
Rejoignez-nous