用PHP从谷歌文档中保存XLS


Saving XLS from Google Docs with PHP

我试图用PHP从谷歌文档解析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));

这三行代码遗漏了一些基本的东西:

  • file_get_contents不是浏览器。任何URI (URL)它不能有片段(在您的情况下#gid=161299136),因为这是永远不会发送到服务器。
  • 最后一点也要强调:如果您使用了这个URI来使用浏览器进行下载,那么在创建正确的下载URI 之前,浏览器中很可能正在运行一些东西来下载。所以你使用了错误的URI来下载。
  • file_get_contents不会通过魔法将您登录到google帐户。
  • 只是制作一个以.xls结尾的文件名并不会将文件格式从HTML神奇地改变为Excel电子表格。

由于这已经是您的三行代码中的四个基本问题,因此很明显,您使用的代码在很大程度上不适合您要做的事情。我建议你扔掉它,从头开始做一些研究,例如,作为PHP开发人员,联系该web服务的供应商以获得支持选项。最有可能的是,他们为你提供了一个API。

  • 快速入门:在PHP中运行驱动器应用程序(通过:我如何在PHP中读取谷歌驱动器电子表格?)

最有可能的是,cookie被设置为您的浏览器,当您登录到谷歌文档-这个cookie不存在于file_get_contents($xlsURL)调用,所以你得到不同的内容。您选择的web调试器将确认这一点,将您的URL粘贴到未登录的浏览器中也是如此。

cURL扩展可以将cookie传递给服务器,但请理解,这个cookie是动态的-因此将它从浏览器中取出并放入cURL到目前为止还不够。最有可能的是,你将不得不走完从登录到文档的整个过程,包括需要更新,无论何时Google选择更新。