0

私はこのphpスクリプトを使用してファイルをGoogleドライブに挿入(アップロード)していますが、完璧です:

require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';

$drive = new Google_Client();

$drive->setClientId('XXX');
$drive->setClientSecret('YYY');
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));

$gdrive = new Google_DriveService($drive);

$drive->setAccessToken(file_get_contents('token.json'));

$doc = new Google_DriveFile();

$doc->setTitle('Test');
$doc->setDescription('Test Document');
$doc->setMimeType('text/plain');

$content = file_get_contents('test.txt');

$output = $gdrive->files->insert($doc, array(
      'data' => $content,
      'mimeType' => 'text/plain',
    ));

print_r($output);

現在、既存の Google ドライブ ファイルを更新(アップロードではなく)したいので、次のスクリプトを使用しています。

require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';

$drive = new Google_Client();

$drive->setClientId('XXX');
$drive->setClientSecret('YYY');
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));

$gdrive = new Google_DriveService($drive);

$drive->setAccessToken(file_get_contents('token.json'));

$fileId = "ZZZ";
$doc = $gdrive->files->get($fileId);

$doc->setTitle('Test'); // HERE I GET THE ERROR "CALL TO A MEMBER FUNCTION SETTITLE()..."
$doc->setDescription('Test Document');
$doc->setMimeType('text/plain');

$content = file_get_contents('test.txt');

$output = $gdrive->files->update($fileId, $doc, array(
      'newRevision' => $newRevision,
      'data' => $content,
      'mimeType' => 'text/plain',
    ));

print_r($output);

残念ながら、次のエラーが表示されます。

PHP Fatal error: Call to a member function setTitle() on a non-object in line $doc->setTitle...

私はこの参照に従いました。問題を解決するのを手伝ってもらえますか、または PHP を介してファイルを Google ドライブに更新するための正確で正しいコードを提案できますか? ありがとう!

4

1 に答える 1

5

オブジェクトであることを期待$docしていますが、Google クライアント ライブラリはデフォルトでオブジェクトではなくデータ配列を返すように構成されているため、そうではありません。

元のソースを変更せずにこの動作を変更するには、次の内容を持つlocal_config.php既存のファイルの隣にファイルを追加できます。config.php

<?php

$apiConfig = array(
    'use_objects' => true,
);

クライアント ライブラリは、この構成を自動的に検出して使用します。

于 2013-04-10T10:02:16.217 に答える