У меня на сайте есть код для отображения удаленных 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); } }
Самый простой способ, который я нашел, это перенести местоположение:
if(checkRemoteFile('http://www.gravatar.com/avatar/'.md5($arUser['email'][0]))) header('Location: http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs='.$sizePic);
Что ж, если 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)
Таким образом, запрос будет выполнять браузер клиента, а не ваш сервер.
Если ваш хост не разрешает file_get_contents , вероятно, другие методы не будут работать.По моему опыту, хосты будут предотвращать любые внешние подключения сокетов из сценария.Поэтому сначала сверьтесь с хостом.
Предполагая, что это проблема, вы все равно можете отобразить тег с атрибутом src в том же месте, которое вы пытаетесь найти в скрипте.
<img src="<?php echo('http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150');?>" />
Вы также можете использовать тот же трюк, чтобы поместить URL в стиль, если вы не хотите использовать тег.
Если ваша защита PHP на вашем сервере предотвращает удаленный захват файлов с помощью file_get_contents (), то ваш следующий лучший вариант - вызов CURL для получения содержимого файла, возможно.