【问题标题】:PHP access file from online download link rather than directPHP 从在线下载链接而不是直接访问文件
【发布时间】:2016-12-28 23:30:14
【问题描述】:

我有一个位于谷歌驱动器上的在线电子表格。此电子表格是公开的,可通过 URL 访问。将export?format=csv 附加到公共 URL 会打开一个下载提示,允许客户端查看器通过选择文件位置并单击“下载”将在线电子表格文件的 CSV 版本下载到他们的计算机。

我想做的是让我的 PHP 脚本与谷歌提供的下载链接https://docs.google.com/spreadsheets/d/<KEY>/export?format=csv进行交互

而不是像www.example.com/file.csv这样的直接下载链接

由于 google 使用 ?format=csv$_GET 值来引导客户端下载,我不能只使用 include_once() 或类似方法来访问我脚本中的文件,因为那样会访问负责的 HTML 文件用于显示谷歌电子表格。

如果不是直接下载链接,我如何通过 PHP 访问此在线下载? PHP 之外的其他方法也是受欢迎的,只要我可以通过 PHP 访问 CSV 文件的数据(或将其下载到服务器,暂时或永久)

【问题讨论】:

    标签: php download google-sheets


    【解决方案1】:

    简单的file_get_contents() 在您的情况下应该可以正常工作。

    $content = file_get_contents('https://docs.google.com/spreadsheets/d/<KEY>/export?format=csv');
    

    【讨论】:

    • 在这种情况下,这只是给了我周围的 HTML 页面。而不是将 CSV 数据作为$content 给我。还有其他想法吗??
    【解决方案2】:

    在解决了很多天的困惑之后,我终于根据网络上的多个教程和示例解决了这个问题。它们都不完全符合我的需求,但基本上这就是我想出的在不使用 Google API 的情况下从互联网下载已发布的 Google 电子表格

    $fileid = "spreadsheet file id here";
    $url = "https://docs.google.com/spreadsheets/d/".$fileid."/export?format=csv&id=".$fileid;
    
    $newfilename = "newfile";
    
    $file = fopen($url,"r");
    
    $output = fopen($newfilename.'.csv', 'wb');
    
    while (($data = fgetcsv($file, 1000, ",")) !== FALSE) {
           fputcsv($output, $data);
    }
    
    fclose($file);
    fclose($output);
    

    运行此代码后,脚本会从 Google 电子表格中获取数据,并将其输出到由 $newfilename.csv 确定的新创建文件,格式为 text/csv

    我希望这对将来的某人有所帮助。关于如何在没有 API 的情况下访问 CSV 格式的 Google 电子表格数据,我已经看到了很多关于 SO 和网络其他部分的主题,并且在没有找到不涉及 API 的真正答案之后,我想我已经做到了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      相关资源
      最近更新 更多