使用七牛的 exif 接口拼凑 url 遇到个疑问,上传到七牛的图片,地址后面+?exif 就能得到 exif 信息的 json 内容,用下面两种拼凑方式,能 echo 拼凑好的 url,但输出数组为 NULL,如果直接给$url 写上 exif 接口地址就正常。这种拼凑 url 方式有问题吗?还是方法不对?
function exif_info($img){
$url = sprintf("%s?exif",$img);
//$url = $img.'?exif';
//$url="http://opmst5o2g.bkt.clouddn.com/uploads/2014/03/2cc1786a9e0bf278c7c098ee6f222d35.jpg?exif";
$handle = fopen($url,"rb");
$content = '';
while (!feof($handle)) {
$content .= fread($handle, 10000);
}
fclose($handle);
$EXIF=json_decode($content,true);
echo $url; //能正常显示为 http://url?exif 的形式
var_dump($EXIF);//为 NULL
}
1
Fishdrowned 2017-06-07 21:44:36 +08:00 via Android
fopen 是要闹哪样?我查一下 php 手册去…
|
2
Fishdrowned 2017-06-07 21:50:34 +08:00 via Android
fopen 也可以打开 http 地址啊…我收回上面那句话。
不过还是推荐你用 curl |
3
minbaby 2017-06-07 22:03:38 +08:00
专门把虚机打开跑了一下,楼主的代码可以直接跑,没有问题。用的是注释中的那个 url。
|
4
mooncakejs 2017-06-07 22:06:28 +08:00 via iPhone
fopen 不如直接 file_get_content,一个参数直接拼接就好
|
5
huaxing0211 OP @minbaby 注释的直接有图片地址的那个肯定行,但这个函数需要接受$img 参数,拼凑 URL,再进行下一步啊!
|
6
huaxing0211 OP @mooncakejs 对于拼凑的 url 一样为空,直接给地址就行!现在需要接受图片地址,拼凑地址获取 json 内容,不可能直接给地址呢!
|
7
alex321 2017-06-07 22:38:16 +08:00
七牛处理掉了这种请求吧,同样 file_get_content 也是返回 null 的。用下面这吧。。。。。
$img = 'http://opmst5o2g.bkt.clouddn.com/uploads/2014/03/2cc1786a9e0bf278c7c098ee6f222d35.jpg'; $url = sprintf('%s?exif', $img); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $content = curl_exec($ch); curl_close($ch); echo $url; echo '<pre>'; print_r(json_decode($content, true)); echo '</pre>'; |
8
zencoding 2017-06-07 23:52:54 +08:00 via Android
推荐使用 curl
http://github.com/wenpeng/curl |
9
HanSonJ 2017-06-08 00:08:01 +08:00
|
10
huaxing0211 OP @HanSonJ 教训的是,我是电气工程师,真不是程序猿,爱好 php,自己边看边学呢。
function get_all_image($content){ preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=["\'""]?(.+?)["\'""]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $content, $images, PREG_PATTERN_ORDER); if(count($images["1"])>0){ echo '<div class="hidden-container">'; for($i=0;$i<count($images["1"]);$i++){ //提取图片 $next_img=$images["1"]["$i"]; echo '<a href="'.$next_img.'" class="highslide" onclick="return hs.expand(this, { thumbnailId:\'thumb1\' })"></a><div class="highslide-caption">'.exif_info($next_img).'</div>'; } echo '</div>'; }else{ echo 'no picture!'; } } function exif_info($img){ $url = sprintf("%s?exif",$img); //$url = $img.'?exif'; //$url="http://opmst5o2g.bkt.clouddn.com/uploads/2014/03/2cc1786a9e0bf278c7c098ee6f222d35.jpg?exif"; $handle = fopen($url,"rb"); $content = ''; while (!feof($handle)) { $content .= fread($handle, 10000); } fclose($handle); $EXIF=json_decode($content,true); echo $url; //这里能输出 http://cdn.ainiu.com/a.jpg?exif 的地址 echo "<br />"; var_dump($EXIF);} //这里输出 NULL 自己在 wordpress 里写的一个函数,读取七牛中图片的 exif 信息。 提取文章中的所有图片,放入数组中,依序输出数组中的图片地址,并拼凑带有?exif 参数的 url,循环输出中,拼凑的 url 能完整 echo 出来,但 fread()却是 NULL,问题出在哪儿呢? 单独赋值带有?exif 的图片地址给$url,却可以正常显示数据,是图片地址传参有问题?还是 url 拼凑有问题?还是在数组中提取图片地址传递有问题? 请赐教! |
11
minbaby 2017-06-08 08:51:10 +08:00
@huaxing0211 我是用你定义的这个函数,传入你注释的那个地址,是函数调用,不是直接使用的
|