我有一个在执行以下代码时失败的PHP脚本(404,[FILE]找不到):

$result = $service->changes->getStartPageToken() ;
$nextStartPageToken = $result->startPageToken ;
$rootResult = $service->files->get('root')

故障出现在最后一行,错误日志(log)显示:

[13-Aug-2023 20:24:47 America/New_York] PHP Fatal error:  Uncaught Google\Service\Exception: {
  "error": {
    "code": 404,
    "message": "File not found: 0AORSlah_iew_Uk9PVA.",
    "errors": [
      {
        "message": "File not found: 0AORSlah_iew_Uk9PVA.",
        "domain": "global",
        "reason": "notFound",
        "location": "fileId",
        "locationType": "parameter"
      }
    ]
  }
}
 in /www/cgi-bin/GoogleRelated/vendor/google/apiclient/src/Http/REST.php:134
Stack trace:
#0 /www/cgi-bin/GoogleRelated/vendor/google/apiclient/src/Http/REST.php(107): Google\Http\REST::decodeHttpResponse()
#1 [internal function]: Google\Http\REST::doExecute()
#2 /www/cgi-bin/GoogleRelated/vendor/google/apiclient/src/Task/Runner.php(187): call_user_func_array()
#3 /www/cgi-bin/GoogleRelated/vendor/google/apiclient/src/Http/REST.php(66): Google\Task\Runner->run()
#4 /www/cgi-bin/GoogleRelated/vendor/google/apiclient/src/Client.php(922): Google\Http\REST::execute()
#5 /www/cgi-bin/GoogleRelated/vendor/google/apiclient/src/Service/Resource.php(238): Google\Client->execute()
#6 /www/cgi-bin/GoogleRelated/vendor/google/apiclient-services/src/Drive/Resource/Files.php(205): Google\Service\Resource->call()
#7 /www/htdocs/gdrive/catchupSongBook(592): Google\Service\Drive\Resource\Files->get()
#8 /www/htdocs/gdrive/catchupSongBook(80): getRootFolderId()
#9 {main}
  thrown in /www/cgi-bin/GoogleRelated/vendor/google/apiclient/src/Http/REST.php on line 134

使用不同的项目JSON文件,我有一个可以成功执行相同代码(以及更多代码)的工作脚本.

由于似乎不可能有一个没有"根"文件夹的Google驱动器(因此,错误消息听起来具有误导性),我认为这里的问题在于使用的作用域或项目本身,但我看不出我当前的 Select 或项目属性有任何问题.我看过这样的答案:this one, for java个答案表明这是正确的方法,但没有找到更好的方法来实现我在这里需要的东西.

我要求的范围是:

"https://www.googleapis.com/auth/drive.appdata"
"https://www.googleapis.com/auth/drive.appfolder"
"https://www.googleapis.com/auth/drive.file"
"https://www.googleapis.com/auth/drive.resource"

真的,我有三个问题.

首先,该问题是否可能与作用域有关

第二,上面的列表是否缺少我需要的东西

第三,有没有办法查看实际授予了哪些作用域,而不仅仅是请求了什么?

推荐答案

第一项质询的答案

首先,该问题是否可能与作用域有关

From your showing script and scopes, I'm worried that your current issue might be due to 首先,该问题是否可能与作用域有关. From $rootResult = $service->files->get('root') and the ID of 0AORSlah_iew_Uk9PVA, it seems that you are trying to retrieve the metadata of the root folder ID. I thought that in the case of your current scopes, the file metadata of the files created by the client can be retrieved by drive.file. But, in this case, I thought that the root folder cannot be retrieved, because the root folder is not created by the client.

在这种情况下,添加https://www.googleapis.com/auth/drive.metadata.readonlyhttps://www.googleapis.com/auth/drive.readonly的作用域如何?或者,把drive.file换成drive.metadata.readonlydrive.readonly怎么样?

第二项问题的答案

第二,上面的列表是否缺少我需要的东西

在这种情况下,我没有关于您的脚本的实际目标的信息.所以,我不能回答是否需要使用"drive.appdata"、"drive.appfolder"、"drive.resource"这样的作用域.但.如果不要求您只检索当前客户端创建的文件以外的文件,我认为不需要使用https://www.googleapis.com/auth/drive.file.

如果你只想检索Google Drive的文件元数据,我认为可能只有https://www.googleapis.com/auth/drive.metadata.readonly个文件元数据可以使用.在这种情况下,还可以检索根文件夹的元数据.

回答第三个问题

第三,有没有办法查看实际授予了哪些作用域,而不仅仅是请求了什么?

如果您想确认访问令牌的作用域,使用以下端点如何?

curl "https://www.googleapis.com/oauth2/v3/tokeninfo?access_token={your access token}"

这样,您就可以看到访问令牌的当前作用域.

Php相关问答推荐

WooCommerce拆分运输包裹上的商品数量增加运输成本

获得客户S在WooCommerce为期1年的总支出

向在添加到购物车上动态创建的WooCommerce产品添加发货类别

在WooCommerce中的本地收件发货方式下添加一个 Select 字段

通过访问单个产品页面更新WooCommerce产品元数据

在WooCommerce管理中 for each 运输方法设置添加自定义字段

将一个按钮添加到WooCommerce产品的管理视图中,该按钮链接到一个自定义的WebHook,并在末尾附加产品ID

将WooCommerce WC_Order对象与wp_Schedule_Event一起使用

在WooCommerce上克隆订单时使用`add_product()`添加产品元数据

模式 bootstrap 未显示

根据发货类别在WooCommerce产品页面中显示快捷代码

限制联系人页面仅允许在WooCommerce中登录的用户

随机显示WordPress快捷代码功能时出现问题

如何使用 AJAX、PHP 和 MYSQL 在 Select 项目时在文本框中填充数据

如何更新 Laravel Eloquent 列强制转换为集合

PHP 解析 XML 以获取多个深度的所有字符串值

如何从 PHP 中的字符串位置排除图像扩展名

Symfony 自定义注销

如何使用先前 SELECT 的结果来 SELECT SQL 数据

使用 OOP PHP 创建动态 WHERE 子句.如何实现 BETWEEN 运算符?