使用PHP 8.2库通过Google Drive服务账号更新文件报错求助
问题排查与解决方案
问题原因
你的代码调用files->update时参数顺序错误,导致文件内容被误当成可选参数(optParams)传入。从错误信息能看到,文件内容"deny from all"被赋值给了$optParams,这完全不符合方法的参数定义。
PHP版Google Drive库的files->update方法正确参数签名为:
public function update(string $fileId, Google_Service_Drive_DriveFile $postBody = null, array $optParams = [])
如果需要更新文件内容,必须将文件数据放在optParams数组的data键中,同时指定uploadType参数。
解决方案
修改你的更新代码,按照正确的参数结构传递:
基础更新(仅修改文件内容)
$content = file_get_contents($filePath); // 无需修改文件元数据时,postBody传null即可 $service->files->update( $existingFile->getId(), null, [ 'data' => $content, 'uploadType' => 'media' // 更新纯内容用media类型即可,无需multipart ] );
进阶更新(同时修改内容与元数据)
如果需要同步修改文件名、描述等元数据,可创建DriveFile对象作为postBody,并使用multipart类型:
$fileMetadata = new Google_Service_Drive_DriveFile(); $fileMetadata->setName('更新后的文件名'); $fileMetadata->setDescription('文件描述更新'); $content = file_get_contents($filePath); $service->files->update( $existingFile->getId(), $fileMetadata, [ 'data' => $content, 'uploadType' => 'multipart' ] );
关键说明
之前删除.htaccess无效,是因为问题根源不在文件本身,而是代码参数传递错误,所以删除后依然报错。
内容的提问来源于stack exchange,提问作者GENC
相关产品推荐
相关产品推荐

