使用PHP从Google Docs保存XLS

时间:2014-06-11 00:32:04

标签: php google-docs xls google-docs-api

我尝试使用PHP解析来自Google Docs的XLS文件。当我手动下载文件然后将其上传到服务器时它工作正常,但是当我使用PHP将完全相同的XLS文件直接保存到服务器时,而不是获取XLS中的所有数据,响应是:

<b>DOM ELEMENT: </b>HTML<br /><b>ATTRIBUTE: </b>lang => en<br /><b>DOM ELEMENT: </b>HEAD<br /><b>DOM ELEMENT: </b>META<br /><b>ATTRIBUTE: </b>charset => utf-8<br /><b>DOM ELEMENT: </b>META<br /><b>ATTRIBUTE: </b>content => width=300, initial-scale=1<br /><b>ATTRIBUTE: </b>name => viewport<br /><b>DOM ELEMENT: </b>META<br /><b>ATTRIBUTE: </b>name => description<br /><b>ATTRIBUTE: </b>content => Create a new spreadsheet and edit with others at the same time -- from your computer, phone or tablet. Get stuff done with or without an internet connection. Use Sheets to edit Excel files. Free from Google.<br /><b>DOM ELEMENT: </b>TITLE<br />

以下是我如何使用PHP将XLS保存到服务器的示例:

$fileName = 'xls/newday2014.xls';
$xlsURL = 'https://docs.google.com/spreadsheets/d/1KKMiBOlvpKaAJ_MsNfaWGmR6ixL53AjAaLf0R18X3e4/edit#gid=161299136';
file_put_contents($fileName, file_get_contents($xlsURL));

2 个答案:

答案 0 :(得分:5)

你在这里用三个班轮代码遗漏了一些基本的东西:

  • file_get_contents不是浏览器。它所采用的任何URI(URL)都不能包含片段(在您的情况下为#gid=161299136),因为它永远不会发送到服务器。
  • 最后一点还强调:如果您使用浏览器下载了确切的URI,那么在创建正确的下载URI之前,您的浏览器中很可能会出现下载的内容。因此,您使用了错误的URI进行下载。
  • file_get_contents不会仅仅通过魔法将您登录到Google帐户。
  • 只是使用.xls结尾的文件名不会将文件格式从HTML神奇地更改为Excel电子表格。

由于这三行代码已经存在四个基本问题,因此很明显,您使用的代码对于您尝试执行的操作而言并不适合。我建议你扔掉它,从头开始做一些研究,例如作为PHP开发人员,请联系该Web服务的供应商以获取您的支持选项。他们很可能会为您尝试做的事情提供API。

答案 1 :(得分:3)

最有可能的是,当您登录Google文档时,Cookie会设置为您的浏览器 - file_get_contents($xlsURL)调用中不会显示此Cookie,因此您会获得不同的内容。您选择的Web调试器将确认,将您的URL粘贴到未登录的浏览器中。

cURL扩展程序可以将Cookie交给服务器,但请理解,此Cookie是动态的 - 因此将其从浏览器中删除并进入cURL是远远不够的。当Google选择更新时,您很可能必须完全从登录到文档,包括需要更新。