2009-04-02 6 views
1

J'utilise actuellement un script de manipulation d'image pour travailler sur les images téléchargées et je rencontre un problème dans mon environnement de développement. Ce même code fonctionne sur mon serveur de production.Erreur imagecreatefromjpeg() - Pourquoi mon script de manipulation d'image échoue-t-il?

L'erreur est:

PHP Warning: imagecreatefromjpeg(): php_network_getaddresses: 
    getaddrinfo failed: Name or service not known in /path/to/script.php 
    on line 75 

La ligne de code sur 75 est:

$this->img = imagecreatefromjpeg(PHPTHUMB."?src=/".$this->image_path); 

qui crée une image qui est chargée à partir d'un autre fait par phpThumb, qui est utilisé pour une autre manipulation.

Des idées pour résoudre ce problème? Quelqu'un peut-il nous éclairer sur ce que signifie l'erreur?

Merci,

Edit: Tout comme un autre peu de perspicacité, si je visite PHPTHUMB . "?src=/" . $this->image_path dans mon navigateur, les charges d'image fines

agent utilisateur php.ini n'a pas résolu le problème indicated here

EDIT (SOLUTION): J'ai dû ajouter l'IP interne 192.168.204.XXX dans le fichier hosts, de sorte que http://dev.mysite.com résolu correctement. Essayer à la fois 127.0.0.1 et l'IP externe n'a donné aucun résultat, mais l'interne fonctionne parfaitement. Merci pour les efforts de tout le monde,

+0

Cela nous aiderait beaucoup si vous dites quelle est la valeur de la constante phpThumb. – vartec

+0

Son l'URL complète de phpThumb.php - http://www.mysite.com/path/to/phpThumb.php – barfoon

Répondre

5

Je ne suis pas sûr de la cause de cette erreur, mais c'est ma meilleure estimation.

Il existe un paramètre PHP particulier qui vous permet de traiter les URL en tant que fichiers. Normalement imagecreatefromjpeg accepte un nom de fichier, je pense. Puisque vous transmettez une URL, vous devez vous assurer que le paramètre particulier est activé. Je crois que vous pouvez trouver plus d'informations à ce sujet ici: http://us2.php.net/file

filename

Path to the file. 
Tip 

A URL can be used as a filename with this function if the fopen wrappers have been enabled. See fopen() for more details on how to specify the filename and List of Supported Protocols/Wrappers for a list of supported URL protocols.

: fopen wrappers http://us2.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

Votre environnement dev ne peut pas être configuré avec cela, mais votre environnement de production pourrait être.

Modifier

Cette page indique votre erreur: http://bugs.php.net/bug.php?id=11058

et mentionne qu'une solution possible est en modifiant votre fichier hosts pour inclure explicitement l'IP/dns du serveur auquel vous accédez.

i tryed to reconfigure my named configuration, without any result, to fix this. the problem was solved by adding the following line to my /etc/hosts:

194.97.55.147 mx.freenet.de

Peut-être que vous pouvez essayer cela?

+0

allow-url-fopen est réglé sur 'On' dans mon php.ini – barfoon

+0

édité mon commentaire précédent. Peut-être que la page que j'ai référencée résoudra les choses? Essayez d'éditer le fichier hosts. – Jamie

+0

J'ai essayé d'ajouter mon adresse IP externe aux hôtes et cela ne fonctionne pas. – barfoon

0

Le message d'erreur indique que quelque chose ne va pas au niveau du réseau. Ainsi, si possible, contournez cela. Essayez d'utiliser le chemin vers le générateur de vignettes, au lieu d'une adresse réseau.

Si ce n'est pas une option, essayez quelque chose qui vous donnera des messages d'erreur plus granulaires. Je suggère CURL. À tout le moins, il devrait donner un message d'erreur plus informatif.

+0

J'ai essayé d'inclure le chemin complet vers le générateur de vignettes, et cela n'a pas fonctionné. Il semble qu'il ne peut pas ouvrir l'URL dans la fonction image. Mais à part allow_url_fopen, je ne sais pas quoi d'autre essayer. – barfoon

1

avez-vous également vérifié que allow_url_fopen est défini sur On dans php.ini?
J'ai vu qu'ils ont mentionné cela dans l'article que vous avez mentionné dans votre message.


ÉDIT: Également, quel système d'exploitation et quelle version de PHP exécutez-vous? "Sur les versions de Windows antérieures à PHP 4.3.0, les fonctions suivantes ne prennent pas en charge l'accès aux fichiers distants: include(), include_once(), require(), require_once() et les fonctions imagecreatefromXXX dans les versions précédentes de PHP 4.3.0. l'extension GD Functions. "


EDIT2:

Je viens de lire ce qui était écrit dans les commentaires, votre allow_url_fopen est activée, désolé. Mais OS, la version PHP et phpinfo() aideraient à trouver le problème.

0

Le simple fait que ce échoue parce que sur votre serveur web, votre résolution DNS est cassé.

Si vous avez un accès SSH à votre serveur, essayez la commande suivante

dig hostname 

où le nom d'hôte est le nom d'hôte de phpThumb

Cela échouera probablement.

En supposant que vous utilisez Linux, ma suggestion serait de modifier votre /etc/resolv.conf (en tant que root)

et ajoutez la ligne suivante avant toute autre ligne commençant par « nameserver »

nameserver 4.2.2.2 

Cela devrait, espérons arranger les choses, bien que vous devrez peut-être redémarrer apache (ou tout autre serveur Web que vous utilisez)!

+0

Qu'est-ce que 4.2.2.2, un service DNS public? L'URL avec laquelle je travaille est http://dev.mysite.com, qui se résout en une machine virtuelle que j'utilise sur mon hôte - ce n'est pas un site visible publiquement. – barfoon

+0

ouais, c'est un service DNS public. Encore une fois, il est toujours possible que votre résolveur ne retourne pas au bon endroit. – Mez

0

Le problème ici est que php ne parvient pas à résoudre l'URL que vous fournissez phpThumb comme indiqué dans this bug report on php.net. Cela signifie peut-être que c'est la faute du système d'exploitation/serveur Web, auquel cas vous pouvez entrer l'adresse IP du serveur auquel vous vous connectez dans votre hosts file manuellement.

Questions connexes