Php 使用curl保存Google Places API Place照片中的照片副本

Php 使用curl保存Google Places API Place照片中的照片副本,php,curl,google-places-api,Php,Curl,Google Places Api,我正在尝试使用curl从GooglePlacePhotos抓取一张照片,并将其保存到我的服务器上 根据的请求格式如下所示: https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=CoQBegAAAFg5U0y-iQEtUVMfqw4KpXYe60QwJC-wl59NZlcaxSQZNgAhGrjmUKD2NkXatfQF1QRap-PQCx3kMfsKQCcxtkZqQ&senso

我正在尝试使用curl从GooglePlacePhotos抓取一张照片,并将其保存到我的服务器上

根据的请求格式如下所示:

https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=CoQBegAAAFg5U0y-iQEtUVMfqw4KpXYe60QwJC-wl59NZlcaxSQZNgAhGrjmUKD2NkXatfQF1QRap-PQCx3kMfsKQCcxtkZqQ&sensor=true&key=AddYourOwnKeyHere
所以我尝试了这个函数:

function download_image1($image_url, $image_file){
    $fp = fopen ($image_file, 'w+');
    $ch = curl_init($image_url);
    // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // enable if you want
    curl_setopt($ch, CURLOPT_FILE, $fp); // output to file
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1000); // some large value to allow curl to run for a long time
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
    // curl_setopt($ch, CURLOPT_VERBOSE, true); // Enable this line to see debug prints
    curl_exec($ch);
    curl_close($ch); // closing curl handle
    fclose($fp); // closing file handle
}

download_image1($photo, "test.jpg");
…其中,
$photo
包含请求url

这不起作用,它保存了一个带有标题错误的空图像,可能是因为请求不是照片的实际url。另外,在请求url中,不可能知道我将获得哪个图像扩展(jpg、png、gif等),因此这是另一个问题

任何关于如何保存照片的帮助都将不胜感激

编辑:当我试图打开图像时,在图像查看器软件中出现标题错误“无法读取文件标题”。脚本本身没有显示任何错误。

我在这里找到了一个解决方案:

它提供了一个非常有用的函数,用于在重定向后返回实际URL:

function get_furl($url)
    {
    $furl = false;
    // First check response headers
    $headers = get_headers($url);
    // Test for 301 or 302
    if(preg_match('/^HTTP\/\d\.\d\s+(301|302)/',$headers[0]))
        {
        foreach($headers as $value)
            {
            if(substr(strtolower($value), 0, 9) == "location:")
                {
                $furl = trim(substr($value, 9, strlen($value)));
                }
            }
        }
    // Set final URL
    $furl = ($furl) ? $furl : $url;
    return $furl;
    }

因此,您将GooglePlacePhotoRequestURL传递给这个函数,它在重定向后返回照片的实际uRL,然后可以与CURL一起使用。它还解释了有时,curl选项
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1)并不总是有效。

您会遇到什么错误?除此之外,为什么不简单地使用file_get_contents()?你有谷歌api密钥吗?否则它将不起作用“成功的Place Photo请求的响应将是图像。图像的类型将取决于最初提交的照片的类型。”请注意,您需要替换此示例中的照片引用并键入,以便请求在应用程序中起作用。“”如果您的请求超过了可用配额,服务器将返回HTTP 403状态,并显示下图,表明配额已超过:“我没有收到任何脚本错误,test.jpg已保存,但它是0KB,当我尝试使用图像查看器(irfan视图)打开它时显示错误,错误为“无法读取文件头”“。是的,我在请求中有api密钥,我只是在这里忽略了它。我不使用file_get_contents(),因为我在某个地方读到,对于https,我需要apache提供SSL支持,但我没有安装SSL支持,也需要不需要curl支持。@nixoschu只是为了更好地澄清一下,如果我在浏览器地址栏中键入请求url,它会重定向并显示图像,因此请求url没有问题,当我在上面的脚本中使用相同的请求url时,它不起作用。您是否尝试使用curl\u getinfo()和curl\u error()来获取更多信息?如果有错误,谷歌应该返回一个:@nixoschu没有错误,在浏览器的地址栏中键入照片请求URL时,该URL工作正常。