Php 使用Zend Gdata从Google文档中删除文档

Php 使用Zend Gdata从Google文档中删除文档,php,zend-framework,google-docs-api,zend-gdata,Php,Zend Framework,Google Docs Api,Zend Gdata,我在使用Google文档和Zend Framework 1.11.4时遇到问题 我试图做的是上传一个文档到谷歌文档,检索HTML内容并删除文档。我正在使用.doc、.pdf和.rtf文件 到目前为止,我的代码是: $client = Zend_Gdata_ClientLogin::getHttpClient( 'my@googleDocsEmail.address', 'MyPassword', Zend_Gdata_Docs::AUTH_SERVICE_NAME )

我在使用Google文档和Zend Framework 1.11.4时遇到问题

我试图做的是上传一个文档到谷歌文档,检索HTML内容并删除文档。我正在使用.doc、.pdf和.rtf文件

到目前为止,我的代码是:

$client = Zend_Gdata_ClientLogin::getHttpClient(
    'my@googleDocsEmail.address', 
    'MyPassword', 
    Zend_Gdata_Docs::AUTH_SERVICE_NAME
);
$gdClient = new Zend_Gdata_Docs($client);

$newDocumentEntry = $gdClient->uploadFile(
    $file, 
    null, 
    null, 
    Zend_Gdata_Docs::DOCUMENTS_LIST_FEED_URI
);

$cv = file_get_contents($newDocumentEntry->getContent()->getSrc());

$newDocumentEntry->delete();
一切正常,直到调用->delete()方法,它返回一个异常预期响应代码200,got 409

我已经在谷歌上搜索了几天,但是没有找到答案,根据谷歌的文档,这是删除文档的正确方法

如果有人知道我做错了什么,那么欢迎任何帮助

多谢各位,
Garry在使用Zend_Gdata_日历库时遇到了相同的409响应问题。Zend framework bugtracker上存在一个开放的bug。看

这似乎归结为缺少由Gdata_应用程序类或链中的一个子类设置的“If Match”头

为了修复Calendar API,我覆盖了Zend_Gdata_Calendar类,并实例化了我的类,而不是那个类:

class Zend_Gdata_Calendar_Fixed extends \Zend_Gdata_Calendar {
    /**
     * Overridden to fix an issue with the HTTP request/response for deleting.
     * @link http://zendframework.com/issues/browse/ZF-10194
     */
    public function prepareRequest($method,
                                   $url = null,
                                   $headers = array(),
                                   $data = null,
                                   $contentTypeOverride = null) {
        $request = parent::prepareRequest($method, $url, $headers, $data, $contentTypeOverride);

        if($request['method'] == 'DELETE') {
            // Default to any
            $request['headers']['If-Match'] = '*';

            if($data instanceof \Zend_Gdata_App_MediaSource) {
                $rawData = $data->encode();
                if(isset($rawData->etag) && $rawData->etag != '') {
                    // Set specific match
                    $request['headers']['If-Match'] = $rawData->etag;
                }
            }
        }
        return $request;
    }
}
然后使用它:

...
$gdata = new Zend_Gdata_Calendar_Fixed($httpClient);
...

我想您也可以做同样的事情,但可以替代Zend_Gdata_Docs类。

409冲突-指定的版本号与资源的最新版本号不匹配。我想你必须“重新蚀刻”文档(按ID搜索…)谢谢ArneRie,我会尝试一下。@ArneRie对此仍不满意,在我找到答案之前,我将采用B计划。我已要求在以下时间就这一主题进行一次屏幕放映: