Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 谷歌放置APi照片_Php_Google Maps_Google Places Api - Fatal编程技术网

Php 谷歌放置APi照片

Php 谷歌放置APi照片,php,google-maps,google-places-api,Php,Google Maps,Google Places Api,我正在尝试使用php为我的网站呈现一幅图像,它将直接从GooglePlacesAPI(参考)动态显示图像 图像源如以下示例所示: https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=CnRtAAAATLZNl354RwP_9UKbQ_5Psy40texXePv4oAlgP4qNEkdIrkyse7rPXYGd9D_Uj1rVsQdWT4oRz4QrYAJNpFX7rzqqMlZw2h2E

我正在尝试使用php为我的网站呈现一幅图像,它将直接从GooglePlacesAPI(参考)动态显示图像 图像源如以下示例所示:

https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=CnRtAAAATLZNl354RwP_9UKbQ_5Psy40texXePv4oAlgP4qNEkdIrkyse7rPXYGd9D_Uj1rVsQdWT4oRz4QrYAJNpFX7rzqqMlZw2h2E2y5IKMUZ7ouD_SlcHxYq1yL4KbKUv3qtWgTK0A6QbGh87GB3sscrHRIQiG2RrmU_jF4tENr9wGS_YxoUSSDrYjWmrNfeEHSGSc3FyhNLlBU&key=API_KEY
如果您通过浏览器访问此URL,它将呈现图像,而这不再是您看到的URL

我的问题是,当查看页面源时,这正是您看到的图像源URL,这是错误的,因为我的密钥随后被公开。在保持密钥私有的同时渲染图像的正确方法是什么?我已经在API和网络上搜索过了,但是没有结果。我确实看到了一些使用文件内容和文件内容的技巧,但我的网络主机不允许这样做。最后,保存图像是违反api规则的,因此这不是一个选项


任何提示都将不胜感激。提前感谢。

您可以向特定URL发送HEAD请求,并提取
位置的内容
-标头:

<?php

  $context  = stream_context_create(array('http' =>array('method'=>'HEAD')));
  $fp = fopen('desiredPlacesApiImgUrl', 'rb', false, $context);
  $meta = stream_get_meta_data($fp);

  if(isset($meta['wrapper_data'])){
    $location=preg_grep('@^\s*Location:@',$meta['wrapper_data']);

    if(count($location)){
       $imgUrl=trim(preg_replace('@^Location:@i','',reset($location)));
      die($imgUrl);//the desired img-url
    }

  }
  fclose($fp);

?>
body::before{
内容:网址(https://maps.gstatic.com/mapfiles/api-3/images/powered-by-google-on-white2.png);
}
img[数据位置]{
可见性:隐藏;
显示:块;
}
  • 谷歌:山景
fopen:您是对的,也不能使用fopen。然而,伟大的思想。您建议使用JavaScript的做法非常有效。我将不得不找到一种方法来修改它,使图像在鼠标上方随时间间隔而改变,但这绝对符合我的目的-谢谢!最后,虽然在我解释的场景中可以看到我的密钥,但如果机器的ip地址未注册到我的API密钥,则不会显示图像,而是显示一个占位符(实际上是所有访问者)。甚至我自己也因为我的动态IP而受到影响。再次感谢您的时间和彻底性,解决了。我已经修复了它(在maps API中添加了延迟属性)谢谢您。最后一个问题,因为我不懂JS。我怎样才能使它不必点击图像标签就能看到下一张照片,我可以将鼠标悬停在上面,每x秒它就会循环到下一张照片?我已经把“点击”改成了“鼠标悬停”,但我想要一个计时器来启动并在鼠标悬停的时候改变图像。先谢谢你。