facebook — PHP: @fopen () и getimagesize (): не удалось открыть поток: ошибка HTTP-запроса! HTTP / 1.0 403 Запрещено

Я пытаюсь подтвердить Facebook photos(public) URL изображения с использованием fopen() а также getimagesize() на cloud9 vm, fopen() функция возвращает нулевое значение, а getimagesize () выдает ошибку

«не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.0 403 Forbidden»

, Обе функции прекрасно работают для других изображений URL.

Я попытался использовать обе функции для проверки URL-адресов изображений Facebook на моем локальном wamp-сервере, и они, кажется, работают нормально. allow_url_fopen включен в php.ini на сервере c9, Возможно ли, что c9 vm заблокированы Facebook или я делаю что-то не так?

Вот моя функция проверки

function validateImage($url)
{
$params = array('http' => array(
'method' => 'HEAD'
));
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp)
return false;  // Problem with url

$meta = stream_get_meta_data($fp);
if ($meta === false)
{
fclose($fp);
return false;  // Problem reading data from url
}

$wrapper_data = $meta["wrapper_data"];
if(is_array($wrapper_data)){
foreach(array_keys($wrapper_data) as $hh){
if (substr($wrapper_data[$hh], 0, 19) == "Content-Type: image") // strlen("Content-Type: image") == 19
{
fclose($fp);
return true;
}
}
}

fclose($fp);
return false;
}

2

Решение

Я проверил с действительным URL-адресом изображения, но вместо этого fopen получает ссылку на изображение (в моем случае id # 5), а не на содержимое. Поэтому мой совет заключается в использовании:
$ img = file_get_contents($ URL);

Теперь, что вы можете сделать:

  $img = file_get_contents($url);
if(strlen($img) !==0) {
echo "good";
if(substr($img,0,3) === "\xFF\xD8\xFF"){
echo "It's a jpg !\n";
}
else "other type\n";
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]