V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huaxing0211
V2EX  ›  PHP

PHP 拼凑 URL 的问题!

  •  
  •   huaxing0211 · 2017-06-07 21:39:17 +08:00 · 3519 次点击
    这是一个创建于 2735 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    https://github.com/overtrue/flysystem-qiniu
    huaxing0211
        10
    huaxing0211  
    OP
       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
        11
    minbaby  
       2017-06-08 08:51:10 +08:00
    @huaxing0211 我是用你定义的这个函数,传入你注释的那个地址,是函数调用,不是直接使用的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6074 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:03 · PVG 10:03 · LAX 18:03 · JFK 21:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.