8791 sujets

Développement web côté serveur, CMS

Bonjour à tous, je suis debutant en developpement et tout nouveau ici.. desolé si je ne suis pas vos regles.

Pour résumer :
je dois m'occuper de faire un mailing pour mon entreprise.

- J'ai réalisé une page php " fondAvecMosaique.php "
Cette page me crée une image en fonction de la variable $email predefinie.

- J'ai ensuite réalisé mon email "email.php" qui va chercher la page php comme ceci :


<?php
  $email = $_GET['email'];

?>
<!DOCTYPE HTML>

<html>
<body>
( ... ) 
<img src="mosaiqueAvecFond.php?email=<?= $email ?>">
( ... )
</body>
</html>




Voilà mon probleme ... Lorsque je lance ma page email.php en local, l'image de mosaiqueAvecFond.php s'affiche tres bien au milieu de l'email ! Par contre, lorsque je met tout ca en ligne sur mon ftp, ca ne marche plus. J'ai pourtant essayé de remplacé le lien en absolu comme ceci :

<img src="http://www.xxxx.xxx/Email/mosaiqueAvecFond.php?email=<?= $email ?>">


mais non.. mon email s'affiche, mais a la place de l'image demandée, il s'affiche une image manquante !

D'ailleurs, si je lance la page " mosaiqueAvecFond.php?email=<?= $test@quimarche.com ?> "depuis mon ordinateur, le navigateur ne m'affiche bien qu'une image jpeg avec " test@quimarche.com " ecrit en mosaique.
mais si j'upload mosaiqueAvecFond.php et que je lance le meme lien, Internal Server Error.

D'ou vient mon erreur ? de mon code php ? pourtant il marche en local !

Voici mon code php ..


<?php
header("Content-Type: image/jpeg");

if ( !isset($_GET['email']) && !isset($_POST['email'])) {
  $_GET['email'] = ' test@quimarche.com '; // 26 caractËres
}

if ( isset($_POST['email']) ) {
  $_GET['email'] = stripslashes($_POST['email']);
}

if ( isset($_GET['melange']) ) {
  $_GET['email'] = str_shuffle($_GET['email']);
}

$email = strtolower($_GET['email']);

$largeurCaracteres = array('0'=>25,'1'=>19,'2'=>25,'3'=>24,'4'=>23,'5'=>28,'6'=>29,'7'=>28,'8'=>31,'9'=>29,'a'=>32,'@'=>49,'b'=>25,'c'=>26,'d'=>33,'e'=>25,'f'=>23,'g'=>27,'h'=>32,'i'=>17,'j'=>24,'k'=>32,'l'=>19,'m'=>49,'n'=>31,'o'=>32,'p'=>33,'.'=>17,'q'=>30,'r'=>24,'s'=>22,'_'=>28,'t'=>16,'-'=>24,'u'=>31,'v'=>25,'w'=>41,'x'=>30,'y'=>30,'z'=>23);
$largeur = largeur() + 20;
$hauteur = 100;
$image = imageCreateTrueColor($largeur, $hauteur);

$fond = imageCreateFromJpeg('Images/fond.jpg');
imageCopy($image, $fond, 0, 0, 0, 0, $largeur, $hauteur);


$x = 10;
for($i=0; $i < strlen($email); $i++) {
  if ( array_key_exists($email[$i], $largeurCaracteres) ) {
    $caractere = imageCreateFromPng('Images/CaracteresSylvain/' . caractere2nomFichier($email[$i]) . '.png');
    imageCopy($image, $caractere, $x, ($hauteur-imagesy($caractere))/2, 0, 0, imagesx($caractere), imagesy($caractere));
    $x += imagesx($caractere);
  }
}


if ( 700 < imagesx($image) ) {
  $x = 700;
  $y = round( ( imagesy($image) * $x ) / imagesx($image) );
  $imageRetaillee = imagecreatetruecolor ($x, $y);
  imagecopyresampled ($imageRetaillee, $image, 0, 0, 0, 0, $x, $y, imagesx($image), imagesy($image));
  imageJPEG($imageRetaillee);
}
else {
  imageJPEG($image);
}




function caractere2nomFichier($caractere) {
  $f = array('@'=>'arobase', '.'=>'point', '-'=>'tiret', '_'=>'souligne');
  if ( array_key_exists($caractere, $f) ) {
    return $f[$caractere];
  }
  else {
    return $caractere;
  }
}

function largeur() {
  global $email, $largeurCaracteres;
  $largeur = 0;
  for($i=0; $i < strlen($email); $i++) {
    if ( array_key_exists($email[$i], $largeurCaracteres) ) {
      $largeur += $largeurCaracteres[$email[$i]];
    }
  }
  return $largeur;
}
?>

Modifié par sheikah (22 May 2012 - 14:54)
Alors dans l'ordre d'idées qui me viennent :

<img src="mosaiqueAvecFond.php?email=<?= $email ?>">

essaye plutôt :

<img src="mosaiqueAvecFond.php?email=<?php $email ?>">


Ensuite, ton code utilise la librairie GD de PHP pour générer l'image. Cette librairie est installée de base sur wamp serveur, mais pas systématiquement sur les hébergements. Tente de voir si elle est installée. (grâce à phpinfo())
je rejoins lothindil pour la seconde partie...

pour la première ça ne change rien Smiley smile <?= ou <?php echo c'est pareil

Mais il est clair que cela ressemble beaucoup au fait que la GD ne soit pas active sur ton hébergement Smiley decu
Modérateur
a écrit :
pour la première ça ne change rien smile <?= ou <?php echo c'est pareil

Il faut que short_open_tag soit activé (php.ini) pour que cela fonctionne pour les versions antérieures à php 5.4 de la sorte ce n'est pas pareil, c'est une cause de problème récurrentes. Surtout chez des hébergeurs mutualisés qui désactivent souvent short_open_tag pour des raisons de compatibilité.
j'ai eu le même souci sur un serveur, et en fait il s'agissait du droit d'accès aux images (en gros quand j'uploadais les images via le ftp, les droits se mettait à 444). Essaye de faire un chmod en 0777 pour voir.
sanchodellavega a écrit :
j'ai eu le même souci sur un serveur, et en fait il s'agissait du droit d'accès aux images (en gros quand j'uploadais les images via le ftp, les droits se mettait à 444). Essaye de faire un chmod en 0777 pour voir.


Merciiiiiii a toi merci merci encore !! C'etait ca .. une histoire de droits de fichiers...

J'ai meme choisi de le mettre a 705 et non a 444. Mais en effet maintenant ca marche.
Merci OVH pour ces valeurs par defaut Smiley langue
Erreur toute con en effet, à laquelle je n'avais pas pensé, car je met TOUJOURS le chmod... comme quoi avec les années on prend des habitudes anti bugs et on y pense même plus Smiley decu