【问题标题】:Downloading zip files from google drive using SDK for PHP使用 SDK for PHP 从谷歌驱动器下载 zip 文件
【发布时间】:2018-09-25 13:06:24
【问题描述】:

我已经使用 Drive SDK for PHP "google/apiclient": "^2.0" 将我的站点备份上传到谷歌驱动器,它在上传方面工作完美现在我正在尝试使用相同的 SDK 从驱动器下载备份的文件,但问题是,在一些服务器运行良好,而在其他服务器上它给了我Header already sent issue。我正在将此作为 WordPress 的插件,并且包含用于下载这些文件的标头不是一个好主意,我知道这一点,但应该是它的替代品。我下载这些文件的代码如下。

$tempID = Helper::getBackupById($backupID);
    $AT = Helper::get_Settings('google_token');
    $refreshToken = Helper::get_Settings('google_refresh_token');

    $client = new Google_Client();
    $client->setClientId('CLIENT ID');
    $client->setClientSecret('CLIENT_SECRET');
    $client->setScopes(array('https://www.googleapis.com/auth/drive'));

    $client->setAccessToken($AT);

    if ($client->isAccessTokenExpired()) {
        $request = $client->refreshToken($refreshToken);
        $newAT = $request['access_token'];
        $newRefreshToken = $request['refresh_token'];
        Helper::save_or_update_settings('google_token', $newAT);
        Helper::save_or_update_settings('google_refresh_token', $newRefreshToken);
        $client->setAccessToken($newAT);
    }

    $service = new Google_Service_Drive($client);

    $google_keys = unserialize($tempID[0]->google_keys);
    $parentId = $google_keys['g_folder'];
    $lists = $service->files->listFiles(array('q' => "'$parentId' in parents"));

    foreach ($lists as $list) {
        if (!is_dir(wp_upload_dir()['basedir'] . '/Restore')) {
            @mkdir(wp_upload_dir()['basedir'] . '/Restore', 0777);
        }
        $storeIn = wp_upload_dir()['basedir'] . '/Restore/' . $list->name . '.zip';

        $content = $service->files->get($list->id, array('alt' => 'media'));

        $headers = $content->getHeaders();
        foreach ($headers as $name => $values) {
            header($name . ': ' . implode(', ', $values));
        }
        header('Content-Disposition: attachment; filename="' . $tempID[0]->file . '"');
        $body = $content->getBody();

        while (!$body->eof()) {
            file_put_contents($storeIn, $body);
        }

        echo "Done.\n";
    }

现在,我的问题是,有没有其他方法可以在不涉及任何标题的情况下下载这些文件。如果是的话,只是它的提示会有很大帮助。

【问题讨论】:

    标签: php wordpress google-drive-api http-headers


    【解决方案1】:

    我刚刚尝试了一些东西,它运行良好 这段代码中的标题部分没有用 我刚刚删除了该代码,如果他将来需要它,它只对某些人运行良好 这是更新的代码。

    $tempID = Helper::getBackupById($backupID);
    $AT = Helper::get_Settings('google_token');
    $refreshToken = Helper::get_Settings('google_refresh_token');
    
    $client = new Google_Client();
    $client->setClientId('CLIENT ID');
    $client->setClientSecret('CLIENT_SECRET');
    $client->setScopes(array('https://www.googleapis.com/auth/drive'));
    
    $client->setAccessToken($AT);
    
    if ($client->isAccessTokenExpired()) {
        $request = $client->refreshToken($refreshToken);
        $newAT = $request['access_token'];
        $newRefreshToken = $request['refresh_token'];
        Helper::save_or_update_settings('google_token', $newAT);
        Helper::save_or_update_settings('google_refresh_token', $newRefreshToken);
        $client->setAccessToken($newAT);
    }
    
    $service = new Google_Service_Drive($client);
    
    $google_keys = unserialize($tempID[0]->google_keys);
    $parentId = $google_keys['g_folder'];
    $lists = $service->files->listFiles(array('q' => "'$parentId' in parents"));
    
    foreach ($lists as $list) {
        if (!is_dir(wp_upload_dir()['basedir'] . '/Restore')) {
            @mkdir(wp_upload_dir()['basedir'] . '/Restore', 0777);
        }
        $storeIn = wp_upload_dir()['basedir'] . '/Restore/' . $list->name . '.zip';
    
        $content = $service->files->get($list->id, array('alt' => 'media'));
    
        $body = $content->getBody();
    
        while (!$body->eof()) {
            file_put_contents($storeIn, $body);
        }
    
        echo "Done.\n";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 2018-07-21
      • 1970-01-01
      相关资源
      最近更新 更多