2010-04-04 5 views
3

Utilisation des fonctions de l'image de PHP et GD vous pouvez utiliser la méthode suivante pour finalement sortie l'image phpmanipulation d'image non valide PHP de et erreur

imagepng($image); 

Parfois, pour une raison quelconque l'image ne peut pas être affichée généralement l'erreur n'est pas avec l'image mais avec les fonctions php réelles ne pas exécuter avec succès. Cependant, cela provoque une image vide qui ne m'aide pas. Ce que je veux savoir est, est-il un moyen de détecter une image vierge ou invalide et créer une nouvelle image, écrire les erreurs à la nouvelle image en utilisant imagestring() et puis afficher cette nouvelle image (debug) .

par exemple, une image affichée avec succès sans erreur:

$image = imagecreate(256, 256); //create image 
imagecolortransparent($image, $BLUE); //set transparent 
imagefilledrectangle($image, 0, 0, 256, 256, $BLUE); //fill with 'transparent colour' 

//Draw a border round the image 
imageline($image, 0, 0, 0, 255, $Black); 
imageline($image, 0, 0, 255, 0, $Black); 
imageline($image, 255, 0, 255, 255, $Black); 
imageline($image, 0, 255, 255, 255, $Black); 

imagestring($image, 1, 10, 10, "I am an image!", $Black); 

imagepng($image); 
imagedestroy($image); 

mais si je présente alors quelques erreurs dans le script php qui peuvent ou peuvent ne pas être à voir avec la création d'image réelle alors le script php échoue et l'image ne sera pas visible ...

$image = imagecreate(256, 256); //create image 
imagecolortransparent($image, $BLUE); //set transparent 
imagefilledrectangle($image, 0, 0, 256, 256, $BLUE); //fill with 'transparent colour' 

//Draw a border round the image 
imageline($image, 0, 0, 0, 255, $Black); 
imageline($image, 0, 0, 255, 0, $Black); 
imageline($image, 255, 0, 255, 255, $Black); 
imageline($image, 0, 255, 255, 255, $Black); 

imagestring($image, 1, 10, 10, "I am an image!", $Black); 

/* I am here to cause problems with the php script 
** and cause the execution to fail, I am a function 
** that does't exist... 
** 
** and I am missing a semi colon! ;)*/ 
non_existant_function() 

imagepng($image); 
imagedestroy($image); 

à ce stade, je veux créer une nouvelle image comme ci-dessus, mais en remplacement du Je suis une image! texte je mettrais l'erreur réelle qui s'est produite.

+0

Avec l'exemple spécifique que vous avez pris, vous auriez une erreur Parse * (erreur de syntaxe: pas de point-virgule) *, ce qui signifie que le script PHP ne commencerait même pas son exécution ;; et si vous ajoutez le point-virgule, vous aurez une erreur fatale * (appelant une fonction inexistante) * ;; dans les deux cas, il n'y a rien que vous puissiez faire: vous ne pouvez pas récupérer de ceux-ci - la meilleure solution est de regarder les fichiers journaux de votre serveur. –

+0

p.s. Si l'image n'est pas détectée avant d'essayer d'être affichée dans le navigateur, l'erreur ci-dessous est fournie. L'image "genimage.php? Number = 4" ne peut pas être affichée, car elle contient des erreurs. Je suis en train de télécharger l'image php et de l'utiliser dans une application et il serait donc utile pour moi d'écrire les erreurs comme une nouvelle image et de l'envoyer à la place. En outre, l'erreur réellement fournie dans le navigateur est assez inutile pour moi car je sais qu'il contient des erreurs ... Je veux connaître les trucs PHP habituels ... Le numéro de ligne du problème, le problème supposé, etc. . Merci. –

+0

Une dernière chose Existe-t-il également un moyen de ne pas renvoyer l'image et d'écrire un message d'erreur plus complet ... qui fournit un peu plus d'informations sur l'endroit où dans mon script php l'erreur s'est produite –

Répondre

2

Ce que vous voulez faire est d'attraper des erreurs PHP, ne pas détecter une "image vide". Vous pouvez utiliser set_error_handler() pour définir un rappel personnalisé appelé en cas d'erreur.

Des choses telles que les erreurs d'analyse sont quelque chose que vous devriez déboguer avant de publier votre code, mais cela devrait vous aider à détecter les erreurs aléatoires (connexions de base de données en train de mourir, etc.).

Questions connexes