imagecreatefromjpeg () error - Почему мой скрипт манипуляции изображениями терпит неудачу? - PullRequest
1 голос
/ 02 апреля 2009

В настоящее время я использую скрипт манипуляции с изображениями для работы с загруженными изображениями, и у меня возникла проблема в моей среде разработки. Этот же код работает на моем производственном сервере.

Ошибка:

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

Строка кода на 75:

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

, который создает изображение, загруженное из другого файла, созданного phpThumb, который используется для дальнейшей манипуляции.

Есть идеи, как это решить? Кто-нибудь может пролить свет на то, что означает ошибка?

Спасибо,

Edit: Еще одно понимание: если я захожу в браузер PHPTHUMB . "?src=/" . $this->image_path, изображение отлично загружается

Пользовательский агент в php.ini не решил проблему, как указано здесь

РЕДАКТИРОВАТЬ (РЕШЕНИЕ): Мне пришлось добавить ВНУТРЕННИЙ 192.168.204.XXX IP в файл hosts, чтобы http://dev.mysite.com разрешился правильно. Попытка и 127.0.0.1 и внешнего IP не дала никакого результата, но внутренний работает отлично. Спасибо за все усилия,

Ответы [ 5 ]

5 голосов
/ 02 апреля 2009

Я совершенно не уверен в причине этой ошибки, но это мое лучшее предположение.

Существует особая настройка PHP, которая позволяет обрабатывать URL-адреса как файлы. Я думаю, обычно imagecreatefromjpeg принимает имя файла. Поскольку вы передаете URL, вам нужно убедиться, что данный параметр включен. Я думаю, что вы можете найти больше информации об этом здесь: http://us2.php.net/file

имя файла

Path to the file.
Tip

URL может использоваться как имя файла с этой функцией, если fopen обертки были включены. Увидеть fopen () для более подробной информации о том, как укажите имя файла и список Поддерживаемые протоколы / оболочки для список поддерживаемых протоколов URL.

Обертки Fopen: http://us2.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

Ваша среда разработки может быть не настроена с этим, но ваша производственная среда может быть.

Редактировать

На этой странице указана ваша ошибка: http://bugs.php.net/bug.php?id=11058

и упоминает, что возможное исправление заключается в изменении файла hosts для явного включения ip / dns сервера, к которому вы обращаетесь.

я пытался перенастроить мой по имени Конфигурация, без какого-либо результата, чтобы почини это. проблема была решена добавив следующую строку в мой / И т.д. / хосты:

194.97.55.147 mx.freenet.de

Может быть, вы можете попробовать это?

1 голос
/ 06 апреля 2009

Вы также проверяли, что allow_url_fopen имеет значение On в php.ini?
Я видел, что они упоминали об этом в статье, на которую вы ссылались в своем посте.


РЕДАКТИРОВАТЬ: Кроме того, какую ОС и какую версию PHP вы используете? Просто прочтите это на php.net :

"В версиях Windows, предшествующих PHP 4.3.0, следующие функции не поддерживают удаленный доступ к файлам: include (), include_once (), require (), require_once () и функции imagecreatefromXXX в расширении функций GD. "


EDIT2:

Я только что прочитал, что было написано в комментариях, ваш allow_url_fopen установлен на On, извините за это. Но ОС, версия PHP и phpinfo () помогут найти проблему.

0 голосов
/ 07 апреля 2009

Проблема здесь в том, что php не удается разрешить URL, который вы указали как PHPTHUMB, как указано в этом сообщении об ошибке на php.net . Возможно, это означает, что это ошибка операционной системы / веб-сервера, и в этом случае вы можете вручную ввести ip-адрес сервера, к которому вы подключаетесь, в файл hosts .

0 голосов
/ 07 апреля 2009

Простой факт, что это не работает, потому что на вашем веб-сервере ваше разрешение DNS нарушено.

Если у вас есть SSH-доступ к вашему серверу, попробуйте следующую команду

dig hostname

где hostname - это имя хоста из PHPTHUMB

Это, вероятно, потерпит неудачу.

Предполагая, что вы используете Linux, я предлагаю изменить ваш /etc/resolv.conf (как root)

и добавьте следующую строку перед любыми другими строками, начинающимися с "nameserver"

nameserver 4.2.2.2

Надеемся, что это все исправит, хотя вам, возможно, придется перезапустить apache (или любой используемый вами веб-сервер)!

0 голосов
/ 02 апреля 2009

Сообщение об ошибке говорит о том, что что-то не так на сетевом уровне. Таким образом, если возможно, обойти это. Попробуйте использовать путь к генератору миниатюр вместо сетевого адреса.

Если это не вариант, попробуйте что-нибудь, что даст вам более подробные сообщения об ошибках. Я предлагаю CURL. По крайней мере, это должно привести к более информативному сообщению об ошибке.

...