Получить удаленный образ с помощью PHP и показать его с помощью GD - PullRequest
0 голосов
/ 20 декабря 2011

У меня на сайте есть код для отображения удаленных Gravatar портретов или загруженных изображений. Загружено нормально, но я не могу получить граватационные изображения.

Не могу использовать file_get_contents , потому что это запрещено на моем хосте.

Вот проверка начала для файла

if(file_exists($arUser['imagem'][0])){
    $imgPath = $arUser['imagem'][0]; //Usar a imagem enviada
}elseif(!strlen($arUser['imagem'][0]) && checkRemoteFile('http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150')){
    $imgPath = 'http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150';
}else           
    $imgPath = '../img/social_noavatar_150.jpg'; //Temporario

Так что это не работает:

$imgData = getimagesize($imgPath);
$src = imagecreatefromwhatever($imgPath);   

Я знаю, что должен заменить:

$ imgPath = 'http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150';

с чем-то вроде:

$ imgPath = GetFileData ('http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150');

или

* $ imgPath = file_get_contents ('http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150');*

Произошла ошибка с обоими, и я не могу создать изображение:

Я искал ответ, но остальные мне не подходили.

Извините за мой плохой английский. (

Примечание:

function imagecreatefromwhatever($image){
$info = pathinfo($image);
$extension = strtolower($info['extension']);
switch($extension) {
    case "jpg":
        return imagecreatefromjpeg($image);
    break;
    case "jpeg":
        return imagecreatefromjpeg($image);
    break;
    case "png":
        return imagecreatefrompng($image);
    break;
    case "gif":
        return imagecreatefromgif($image);
    break;
    default:
        return imagecreatefromjpeg($image);
}
}

Ответы [ 4 ]

1 голос
/ 03 января 2012

Самый простой способ, который я нашел, это перенести местоположение:

 if(checkRemoteFile('http://www.gravatar.com/avatar/'.md5($arUser['email'][0])))
    header('Location: http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs='.$sizePic);
1 голос
/ 20 декабря 2011

Что ж, если file_get_content недоступен на вашем хосте, вам может не повезти.Если это функция безопасности на вашем хосте, то вы не найдете ни одной функции, которая позволяла бы вам получать данные с другого сервера.

Возможно, вы захотите просто обойти эту функцию и установить в свой URL-адрес src своего изображения значениеграватар один.Что-то вроде:

<img src="http://www.gravatar.com/avatar/<?=md5($arUser['email'][0]);?>&fs=150" width="150"/>

(Пожалуйста, проверьте URL-адрес дважды, я добавил символ & перед символом fs, так как это имеет больше смысла, но я не знаю, как выглядит URL-адрес gravatar api)

Таким образом, запрос будет выполнять браузер клиента, а не ваш сервер.

0 голосов
/ 20 декабря 2011

Если ваш хост не разрешает file_get_contents , вероятно, другие методы не будут работать.По моему опыту, хосты будут предотвращать любые внешние подключения сокетов из сценария.Поэтому сначала сверьтесь с хостом.

Предполагая, что это проблема, вы все равно можете отобразить тег с атрибутом src в том же месте, которое вы пытаетесь найти в скрипте.

<img src="<?php echo('http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150');?>" />

Вы также можете использовать тот же трюк, чтобы поместить URL в стиль, если вы не хотите использовать тег.

0 голосов
/ 20 декабря 2011

Если ваша защита PHP на вашем сервере предотвращает удаленный захват файлов с помощью file_get_contents (), то ваш следующий лучший вариант - вызов CURL для получения содержимого файла, возможно.

...