我正在尝试制作一个php“图像下载器”,到目前为止,一切都按照我想要的方式进行。我面临的问题可能是我试图访问的服务器的某种安全性。例如,这个url会显示我想用我的服务器下载的图像。
但是,如果我尝试在我的网站中至少使用该网址显示该图片,则根本不会显示。我无法显示我的网站的网址,但它只是一个简单的<img />
标记。
有什么方法可以解决这个问题,还是应该退出?
P.S只是为了清楚地表明我的代码没有错,我可以从我迄今为止尝试过的其他网站下载任意数量的图像。并且不要问我代码,因为即使<img src="url_here.jpg" />
不起作用,所以查看php代码毫无意义。
答案 0 :(得分:2)
是的,它不会出现,因为其他服务器阻止了图像的热链接。
典型的例子是
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yande.re/.*$ [NC]
RewriteRule \.(gif|jpg|js|css)$ - [F]
解决方案。
证明Cencept
$url = 'https://yande.re/sample/2f7b6c5d87d90f173769d999e60861c8/yande.re%20250521%20sample.jpg';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31");
curl_setopt($ch, CURLOPT_REFERER, "https://yande.re");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec($ch);
curl_close($ch);
// $data is file data
$post = array('image' => base64_encode($data), 'key' => "YOUR_API_KEY_ITS_FREE");
$timeout = 30;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://api.imgur.com/2/upload.json');
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$json = curl_exec($curl);
curl_close ($curl);
$json = json_decode($json);
printf("<img src\"%s\" / >",$json->upload->links->small_square);
输出