系统相关
首页 > 系统相关> > PHP-Google Spreadsheet API:超出了内存

PHP-Google Spreadsheet API:超出了内存

作者:互联网

不知道是否有人有使用Google Spreadsheets API或Zend_GData类的经验,但是值得一试:

当我尝试在750行电子表格中插入一个值时,它会花一些时间,然后引发一个错误,表明我的内存限制已超过(128 MB!).在查询此电子表格的所有记录时,我也得到了此信息,但是我可以想象得到,因为它包含很多数据.但是为什么在插入行时会发生这种情况?那不是太复杂,是吗?这是我使用的代码:

public function insertIntoSpreadsheet($username, $password, $spreadSheetId, $data = array()) {
    $service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME;
    $client = Zend_Gdata_ClientLogin::getHttpClient($username, $password, $service);
    $client->setConfig(array( 'timeout' => 240 ));
    $service = new Zend_Gdata_Spreadsheets($client);
    if (count($data) == 0) {
        die("No valid data");
    }
    try {
        $newEntry = $service->insertRow($data, $spreadSheetId);
        return true;
    } catch (Exception $e) {
        return false;
    }
}

解决方法:

我今天刚遇到这个.当调用insertRow()方法时,我的脚本使用了130MB以上的内存,并插入了约600条记录的工作表中.我在framework version 1.11上进行了测试.

解决方法是,使用现有的Zend HTTP客户端对象发送带有Atom条目的POST,Atom条目包含要插入的行的数据.我遵循Google的协议adding a list row.

下面是我想出的代码. $values参数是一个关联数组,其键与行的列名匹配.当然,您已经知道$spreadsheetKey和$worksheetId(如果要插入的工作表是电子表格中的第一个工作表,则我不确定它的ID是否必要).

$authService = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME;
$httpClient = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $authService);

function insertRow($httpClient, $spreadsheetKey, $worksheetId, $values) {
    $entry = createEntry($values);
    $httpClient->setUri("https://spreadsheets.google.com/feeds/list/".$spreadsheetKey."/".$worksheetId."/private/full");
    $response = $httpClient->setRawData($entry, 'application/atom+xml')->request('POST');
    return $response->getStatus() == 201;
}

function createEntry($values) { 
    $entry = "<entry xmlns=\"http://www.w3.org/2005/Atom\"";
    $entry .= " xmlns:gsx=\"http://schemas.google.com/spreadsheets/2006/extended\">";
    foreach($values as $key => $value) {
        $entry .= "<gsx:".$key.">".$value."</gsx:".$key.">";
    }
    $entry .= "</entry>";
    return $entry;
}

希望这可以帮助.

标签:google-sheets,gdata-api,zend-gdata,zend-framework,php
来源: https://codeday.me/bug/20191024/1917384.html