Я использую API api graph facebook, и он работал хорошо, пока не понял, что в некоторых файлах jpg в конце есть строка запроса, что делает их непригодными для использования.
Я пытался скинуть все после .jpg
в надежде, что он все равно загрузит изображение, но, к сожалению, это не так.
В следующем коде возьмите $facebook_image_url
быть тем, кто выше. Это прекрасно работает, когда URL заканчивается .jpg
но не на вышесказанном. Как примечание, я конвертирую имя в случайное число
$File_Name = $facebook_image_url;
$File_Ext = '.jpg';
$Random_Number = rand(0, 9999999999); //Random number to be added to name.
$NewFileName = $Random_Number.$File_Ext; //new file name
$local_file = $UploadDirectory.$NewFileName;
$remote_file = $File_Name;
$ch = curl_init();
$fp = fopen ($local_file, 'w+');
$ch = curl_init($remote_file);
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_exec($ch);
curl_close($ch);
fclose($fp);
$image = new Imagick(DIR_TEMPORARY_IMAGES.$NewFileName);
Я получаю ошибку
Неустранимая ошибка: необработанное исключение «ImagickException» с сообщением «Не
Файл JPEG: начинается с 0x3c 0x21 `/mysite/temp-images/1849974705.jpg ‘
@ jpeg.c / EmitMessage / 232 ‘
Я могу подтвердить, что изображение не сохраняется как правильный jpg, просто небольшой файл размером 3 КБ с именем 1849974705.jpg (или другие случайные числа)
Есть ли
A: способ получить эти изображения из Facebook в формате jpg
или же
B: способ их успешного преобразования в jpgs
То, что в URI что-то есть .jpg, не означает, что это изображение.
Получение этого URL через wget дает результат:
<!DOCTYPE html>
<html lang="en" id="facebook">
<head>
<title>Facebook | Error</title>
<meta charset="utf-8">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="cache-control" content="no-store">
<meta http-equiv="cache-control" content="max-age=0">
<meta http-equiv="expires" content="-1">
<meta http-equiv="pragma" content="no-cache">
<meta name="robots" content="noindex,nofollow">
<style>
....
....
то есть это не изображение, именно то, о чем говорит сообщение об ошибке.
Вы всегда можете загрузить изображение, используя file_get_contents()
Этот код работает для меня …
file_put_contents("image.jpg", file_get_contents("https://scontent.xx.fbcdn.net/hphotos-xaf1/v/t1.0-9/522827_10152235166655545_26514444_n.jpg?oh=1d52a86082c7904da8f12920e28d3687&oe=5659D5BB"));