2010-12-30 3 views
2

Я пытаюсь вставить изображение внутри php сгенерированного изображения (используя imagecreatefromX(), где x = gif, jpeg или png), используя периметр GET в качестве исходного URL-адреса. Я стараюсь, чтобы он проверить, какой тип MIME это, делая это:Как вернуть абсолютный url

$pic = $_GET['pic']; 

switch(returnMIMEType($pic)) { 

    case "image/gif": 
     $profileImage = @imagecreatefromgif($pic) or die('Unable to load gif image.'); 
     break; 

    case "image/jpg": 
     $profileImage = @imagecreatefromjpeg($pic) or die('Unable to load jpeg image.'); 
     break; 

    case "image/png": 
     $profileImage = @imagecreatefrompng($pic) or die('Unable to load png image.'); 
     break; 

    default: 
     $pic = 'http://www.example.com/image.gif'; 
     $profileImage = @imagecreatefromgif($pic) or die('Unable to load gif image.'); 
     break; 
} 

$profileImageWidth = imagesx($profileImage); 
$profileImageHeight = imagesy($profileImage); 

imagecopyresized($image, $profileImage, 0, 0, 0, 0, 25, 25, $profileImageWidth, $profileImageHeight); 

returnMIMEType() это простая функция, которую я придумал, чтобы вернуть тип MIME.

Когда URL указан в таком формате: «http://graph.facebook.com/123456789/picture», он должен вернуться с изображением jpg изображения профиля пользователей на Facebook, но я предполагаю, и с чем у меня возникают проблемы, PHP смотрит на этот точный URL-адрес, а не на URL-адрес «http://graph.facebook.com/123456789/picture». Как мне это сделать, чтобы он понимал, что нужно ждать перенаправления?

Благодарим вас за рассмотрение этого вопроса!

Здесь ошибка дает:

Warning: mime_content_type() [function.mime-content-type]: File or path not found 
'http://graph.facebook.com/123456789/picture' 
+5

Что именно происходит, когда вы пытаетесь это сделать? В качестве первого шага удалите '@', чтобы получить содержательные сообщения об ошибках. Переадресация - это возможность, но у нее могут быть и другие причины. –

+0

Обновлено сообщение с сообщением об ошибке. Однако удаление «@» не изменило выход. – Shaz

ответ

2

Перенаправление не должно быть проблемой. Скорее всего, у вас установлено значение ini allow_url_fopen равным false, поэтому вам не разрешено открывать URL-адреса с файловыми функциями, и ошибка подавляется, потому что вы используете @. Попробуйте дважды проверить, что вы включили allow_url_fopen, и если это не сработает, попробуйте удалить @ для более значимого сообщения об ошибке.

Я пробовал использовать URL-адрес http://graph.facebook.com/123456789/picture и «imagecreatefromgif(), и он работал отлично для меня.

EDIT: Функции fileinfo не нравятся URL. Попробуйте следующее типа:

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$mime_type = finfo_buffer($finfo, file_get_contents($url)); 
+0

Я попытался использовать ini_set(), но безрезультатно. Я не использую fopen, просто imagecopyresized() ;. Должен ли я использовать fopen раньше? – Shaz

+0

Извините, написал, что перед редактированием в сообщении об ошибке. 'allow_url_fopen' применяется ко всем функциям, открывающим файлы, но это, похоже, не проблема. Попробуйте обновленный код, который я разместил. – mfonda

+0

Спасибо, что сработало отлично! Хотя webbiedave упоминает экономию пропускной способности, вы тот, кто первым исправил проблему. Престижность вам обоим. :) – Shaz

Смежные вопросы