【发布时间】:2012-02-28 10:38:47
【问题描述】:
我有以下问题。我使用 curl 从服务器下载图像。我为图像自动生成名称并下载它。一些生成的图像名称不是返回图像。我如何知道一个 url 是否返回一个图像?
对不起,我的英语“烂”了。
提前致谢!
【问题讨论】:
-
所以您是通过生成随机文件名并向该文件名发出请求来从服务器请求图像?如果找不到图像,那不会返回 404 吗?一点代码就可以澄清很多。
我有以下问题。我使用 curl 从服务器下载图像。我为图像自动生成名称并下载它。一些生成的图像名称不是返回图像。我如何知道一个 url 是否返回一个图像?
对不起,我的英语“烂”了。
提前致谢!
【问题讨论】:
$content_type = curl_getinfo ( $curl_obj, CURLINFO_CONTENT_TYPE);
【讨论】:
Vytautas 的回答是正确的,但不完整。
$url = 'http://test.com/test/test/something';
$c = curl_init($url);
// Here you would want to set more curl settings, such as
// enabling redirection and setting a valid user agent.
curl_exec($c);
$t = curl_getinfo($c, CURLINFO_CONTENT_TYPE);
在那之后,$t 应该包含 mimetype(连同其他一些东西),除非发生错误,此时您会得到一个 NULL。
也就是说,您应该检查 3 点以确保返回的数据属于某种类型:
【讨论】:
我建议您像现在一样继续将数据流式传输到您的服务器。要在尝试转换之前进行检查,您可以使用 finfo-file。
一种更复杂的方法是设置Accept 标头,例如使用 cUrl 仅在标头匹配时才获得响应。示例:
curl_setopt($cURL,CURLOPT_HTTPHEADER,array (
"Accept: application/json"
));
或使用CURLINFO_CONTENT_TYPE,见http://ch.php.net/manual/en/function.curl-setopt.php
【讨论】:
Accept很大程度上依赖于远程服务器和任何应用程序的实现。