我无法将一些 facebook 图片保存到我的服务器,因为它不理解该文件
I cant save some facebook images to my server as it does not understand the file
我正在使用 facebook 图 api,它运行良好,直到我意识到某些 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);
我收到的错误是
Fatal error: Uncaught exception 'ImagickException' with message 'Not a
JPEG file: starts with 0x3c 0x21 `/mysite/temp-images/1849974705.jpg'
@ jpeg.c/EmitMessage/232'
我可以确认图像没有保存为正确的 jpg,只是一个名为 1849974705.jpg(或其他随机数字)的 3KB 小文件
有没有
A:一种从 facebook 获取原始 jpg 图像的方法
或
B: 一种将它们成功转换为 jpg 的方法
仅仅因为 URI 中有 .jpg 并不意味着它是图像。
通过 wget 得到 URL 结果:
<!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"));
我正在使用 facebook 图 api,它运行良好,直到我意识到某些 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);
我收到的错误是
Fatal error: Uncaught exception 'ImagickException' with message 'Not a JPEG file: starts with 0x3c 0x21 `/mysite/temp-images/1849974705.jpg' @ jpeg.c/EmitMessage/232'
我可以确认图像没有保存为正确的 jpg,只是一个名为 1849974705.jpg(或其他随机数字)的 3KB 小文件
有没有
A:一种从 facebook 获取原始 jpg 图像的方法
或
B: 一种将它们成功转换为 jpg 的方法
仅仅因为 URI 中有 .jpg 并不意味着它是图像。
通过 wget 得到 URL 结果:
<!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"));