如何在PHP中加速googledriveapi的加载
我在StackOverflow中发现了很多关于这方面的话题,但有些已经过时了,有些是8年前的事了 我正在使用GoogleDriveAPI和PHP显示一个表树,并且已经这样做了,但是它太慢了,有时需要30秒才能加载 这是我的密码:如何在PHP中加速googledriveapi的加载,php,google-api,google-drive-api,google-api-php-client,Php,Google Api,Google Drive Api,Google Api Php Client,我在StackOverflow中发现了很多关于这方面的话题,但有些已经过时了,有些是8年前的事了 我正在使用GoogleDriveAPI和PHP显示一个表树,并且已经这样做了,但是它太慢了,有时需要30秒才能加载 这是我的密码: $root['pageSize'] = 10; $root['q'] = "mimeType='application/vnd.google-apps.folder' and name='MainFolder' and trashed=false";
$root['pageSize'] = 10;
$root['q'] = "mimeType='application/vnd.google-apps.folder' and name='MainFolder' and trashed=false";
$root['fields'] = 'files(id, name, modifiedTime, mimeType), nextPageToken';
$rootfolder = $service->files->listFiles($root);
foreach( $rootfolder as $pp => $mainroot) {
$parameters['pageSize'] = 10;
$parameters['q'] = "'{$mainroot['id']}' in parents";
$parameters['fields'] = 'files(id, name,modifiedTime), nextPageToken';
$files = $service->files->listFiles($parameters);
foreach( $files as $k => $file ){
echo " <tr>
<td><i class='ti-folder'></i>
<button class='toggleDetails'> ";
echo $file['name'];
echo "</button>";
// display subfolders
$parameters2['pageSize'] = 10;
$parameters2['q'] = "'{$file['id']}' in parents";
$parameters2['fields'] = 'files(id, name, modifiedTime, mimeType), nextPageToken';
$sub_files = $service->files->listFiles($parameters2);
echo " <ul class='details filelistdown'> ";
foreach( $sub_files as $kk => $sub_file ) {
echo " <li>     <i class='ti-calendar'></i> {$sub_file['name']}</li>";
// list files
$subfiles_2['pageSize'] = 10;
$subfiles_2['q'] = "'{$sub_file['id']}' in parents";
$subfiles_2['fields'] = 'files(id, name, modifiedTime, mimeType, webViewLink, webContentLink), nextPageToken';
$sub_files_two_2 = $service->files->listFiles($subfiles_2);
echo "<ul>";
foreach( $sub_files_two_2 as $uu => $sub_file_2 ) {
echo "<li>              *{$sub_file_2['name']} -- <a href='{$sub_file_2['webContentLink']}' target='_blank' class='badge badge-success'>Download</a> or <a href='{$sub_file_2['webViewLink']}' target='_blank' class='badge badge-primary'>View</a></li>";
}
echo "</ul>";
}
}
}
$root['pageSize']=10;
$root['q']=“mimeType='application/vnd.google apps.folder'和name='MainFolder',trashed=false”;
$root['fields']='files(id、name、modifiedTime、mimeType),nextPageToken';
$rootfolder=$service->files->listFiles($root);
foreach($rootfolder作为$pp=>$mainroot){
$parameters['pageSize']=10;
$parameters['q']=“{$mainroot['id']}在父级中”;
$parameters['fields']='files(id,name,modifiedTime),nextPageToken';
$files=$service->files->listFiles($parameters);
foreach($k=>$file形式的文件){
回声“
";
echo$file['name'];
回声“;
//显示子文件夹
$parameters2['pageSize']=10;
$parameters2['q']=“{$file['id']}在父级中”;
$parameters2['fields']='文件(id、名称、修改时间、mimeType),下一个GetOken';
$sub_files=$service->files->listFiles($parameters 2);
echo“”;
foreach($kk=>$sub_文件形式的sub_文件){
echo“- {$sub_文件['name']}
”;
//列出文件
$subfiles_2['pageSize']=10;
$subfiles_2['q']=“{$sub_文件['id']}在父文件中”;
$subfiles_2['fields']='文件(id、名称、修改时间、mimeType、webViewLink、webContentLink),下一个GetOken';
$sub\u files\u two\u 2=$service->files->listFiles($subfiles\u 2);
回声“”;
foreach($sub_files\u two\u 2作为$uu=>$sub_file\u 2){
echo“- nbsp>nbsp*{$sub_file_2['name']}-或
”;
}
回声“
”;
}
}
}
我只是想问一下,有没有办法加快加载文件的速度
感谢谷歌硬盘API是一个免费的API,你只需付费即可获得,我不会试图过多关注速度,你只会受到配额例外的影响
关于你的代码,你有很多要求。如果在目录结构之后运行一个完整的请求,则可以将所有内容加载到单个变量中,然后在自己的计算机上对其进行本地排序。鉴于文件列表方法的最大页面大小为1000,您可以通过不必调用每个目录来获取其子目录来大量减少请求数。为什么要将
pageSize
设置为10
?将其设置为最大值,1000
。此外,我会首先检索驱动器中的所有文件,然后根据它们的父级组织它们。没有必要像其他人说的那样递归调用API。@Iamblichus你好,先生。我将其设置为10,因为我认为它可能有助于优化加载<代码>我首先检索驱动器中的所有文件,然后根据它们的父级对它们进行组织。这就是我在父级中使用“$idparent”所做的。有没有给孩子打电话的建议?我使用的是v3 btwNo,问题是你不应该在parents中调用$parameters['q']=“{$mainroot['id']}”代码>如果要获取所有文件(而不仅仅是不在任何子文件夹中的文件)。问题是(1)获取所有文件,(2)基于文件的父级,在本地构建树结构,不再调用API(因为您已经获得了所有必要的信息)。这对你有意义吗?你需要更多的帮助吗?