PHP 拼凑 URL 的问题!

2017-06-07 21:39:17 +08:00
 huaxing0211

使用七牛的 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
}
3397 次点击
所在节点    PHP
11 条回复
Fishdrowned
2017-06-07 21:44:36 +08:00
fopen 是要闹哪样?我查一下 php 手册去…
Fishdrowned
2017-06-07 21:50:34 +08:00
fopen 也可以打开 http 地址啊…我收回上面那句话。

不过还是推荐你用 curl
minbaby
2017-06-07 22:03:38 +08:00
专门把虚机打开跑了一下,楼主的代码可以直接跑,没有问题。用的是注释中的那个 url。
mooncakejs
2017-06-07 22:06:28 +08:00
fopen 不如直接 file_get_content,一个参数直接拼接就好
huaxing0211
2017-06-07 22:24:57 +08:00
@minbaby 注释的直接有图片地址的那个肯定行,但这个函数需要接受$img 参数,拼凑 URL,再进行下一步啊!
huaxing0211
2017-06-07 22:28:00 +08:00
@mooncakejs 对于拼凑的 url 一样为空,直接给地址就行!现在需要接受图片地址,拼凑地址获取 json 内容,不可能直接给地址呢!
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>';
zencoding
2017-06-07 23:52:54 +08:00
HanSonJ
2017-06-08 00:08:01 +08:00
在我看来,不善于 github 搜索以及 composer 包使用是当前 PHP 开发者总体素质低下的原因之一

https://github.com/overtrue/flysystem-qiniu
huaxing0211
2017-06-08 01:39:04 +08:00
@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 拼凑有问题?还是在数组中提取图片地址传递有问题?
请赐教!
minbaby
2017-06-08 08:51:10 +08:00
@huaxing0211 我是用你定义的这个函数,传入你注释的那个地址,是函数调用,不是直接使用的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/366770

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX