You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP调用Google Drive API按所有者获取所有文件与文件夹

实现方案说明

Google Drive API的q查询参数不支持直接对返回结果按所有者分组,所以推荐采用「API筛选所需数据 + PHP层面做分组」的组合方案,兼顾性能和灵活度。

具体调整步骤
  • 第一步:调整API查询参数,拉取全量所需数据
    你当前的q参数仅返回共享给你的文件夹,可根据实际需求调整筛选条件,比如拉取所有未删除的文件+文件夹,示例参数调整如下:
$parameters['pageSize'] = 1000; // 单页最大支持1000条,减少请求次数
$parameters['q'] = "trashed=false"; // 排除回收站内容,如需只拿文件夹可加 and mimeType='application/vnd.google-apps.folder'
$parameters['fields'] = 'files(id, name, modifiedTime, mimeType, owners), nextPageToken';

注意如果数据量超过单页上限,需要通过nextPageToken循环拉取所有数据,避免漏数。

  • 第二步:PHP层面按所有者完成分组
    拿到所有文件数据后不要直接输出,先遍历存入以所有者邮箱为key的数组中完成分组:
$groupedFiles = [];
$files = $service->files->listFiles($parameters);

// 这里可以补充分页循环逻辑,拿到nextPageToken后重复调用listFiles直到token为空
foreach ($files as $file) {
    $owners = $file->getOwners();
    foreach ($owners as $owner) {
        $ownerEmail = $owner->getEmailAddress();
        // 初始化所有者分组
        if (!isset($groupedFiles[$ownerEmail])) {
            $groupedFiles[$ownerEmail] = [
                'ownerName' => retrieve_name($ownerEmail),
                'items' => []
            ];
        }
        $groupedFiles[$ownerEmail]['items'][] = $file;
    }
}
  • 第三步:遍历分组后的数据渲染页面
    分组完成后遍历输出即可实现按所有者展示的效果:
foreach ($groupedFiles as $ownerEmail => $ownerInfo) {
    // 输出所有者分区标题
    echo "<tr><td colspan='2'><strong>{$ownerInfo['ownerName']} 的内容</strong></td></tr>";
    // 输出该所有者下的所有文件/文件夹
    foreach ($ownerInfo['items'] as $item) {
        $icon = $item->getMimeType() === 'application/vnd.google-apps.folder' ? "<i class='ti-folder'></i>" : "<i class='ti-file'></i>";
        echo "<tr>
        <td><large>{$icon}</large>
        <a href='rmsystems.php?shared&&id={$item->getId()}&&foldername={$item->getName()}&&email={$ownerEmail}'>".
        folder_from_rename($item->getName())."&nbsp;&nbsp;<span class='badge badge-primary'>link</span>
        </a></td>
        <td><i class='ti-crown'></i>&nbsp;&nbsp;{$ownerInfo['ownerName']}</td>
        </tr>";
    }
}
补充提示

如果只需要查询特定所有者的内容,可直接在q参数添加'目标邮箱地址' in owners做提前筛选,不需要拉取全量数据再过滤,性能更高。

内容的提问来源于stack exchange,提问作者Mon Padi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 13:54:01