このチュートリアルに従って、リモートサーバーから直接phpを使用してGoogleドライブにファイルをアップロードしました。GoogleAPIコンソールから新しいAPIプロジェクトを作成し、ドライブAPIとドライブSDKサービスを有効にして、OAuthクライアントIDとクライアントシークレットをリクエストし、それらを書き込みます。スクリプトで、PHPフォルダ用のGoogle APIクライアントライブラリと一緒にhttp://www.MYSERVER.com/script1.phpにアップロードして、認証コードを取得します。
<?php
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'); // HERE I WRITE MY Client ID
$drive->setClientSecret('XXX'); // HERE I WRITE MY Client Secret
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$gdrive = new Google_DriveService($drive);
$url = $drive->createAuthUrl();
$authorizationCode = trim(fgets(STDIN));
$token = $drive->authenticate($authorizationCode);
?>
http://www.MYSERVER.com/script1.phpにアクセスすると、完全に実行されるため、認証を許可し、2番目のスクリプトで記述できるAuthコードを取得します。次に、それをhttp://www.MYSERVER.com/script2.phpにアップロードします。
<?php
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('X'); // HERE I WRITE MY Client ID
$drive->setClientSecret('X'); // HERE I WRITE MY Client Secret
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$gdrive = new Google_DriveService($drive);
$_GET['code']= 'X/XXX'; // HERE I WRITE AUTH CODE RETRIEVED AFTER RUNNING REMOTE script.php
file_put_contents('token.json', $drive->authenticate());
$drive->setAccessToken(file_get_contents('token.json'));
$doc = new Google_DriveFile();
$doc->setTitle('Test Drive');
$doc->setDescription('Document');
$doc->setMimeType('text/plain');
$content = file_get_contents('drive.txt');
$output = $gdrive->files->insert($doc, array(
'data' => $content,
'mimeType' => 'text/plain',
));
print_r($output);
?>
これで、MYSERVERの同じフォルダーにtoken.jsonの空のファイル(書き込み可能)と単純なdrive.txt(ドライブにアップロードするファイル)をアップロードできますが、最終的にhttp://www.MYSERVER.comにアクセスします。 /script2.phpブラウザは毎回HTTP500 (内部サーバーエラー)を表示し、ファイルがGoogleドライブにアップロードされません。手順にエラーがありますか、それともスクリプトに問題がありますか?これを解決するのを手伝ってください!
編集:
MYSERVERエラーログは次のものでいっぱいです。
PHP Fatal error: Uncaught exception 'Google_AuthException' with message 'Error fetching OAuth2 access token, message: 'invalid_grant'' in /var/www/vhosts/.../gdrive/google-api-php-client/src/auth/Google_OAuth2.php:113
Stack trace:
#0 /var/www/vhosts/.../gdrive/google-api-php-client/src/Google_Client.php(131): Google_OAuth2->authenticate(Array, NULL)
#1 /var/www/vhosts/.../gdrive/sample2.php(23): Google_Client->authenticate()
#2 {main}
thrown in /var/www/vhosts/.../gdrive/google-api-php-client/src/auth/Google_OAuth2.php on line 113