使用cron执行PHP将文件上传到Google驱动器

时间:2015-02-14 17:56:06

标签: php google-drive-api google-api-php-client

我正在尝试将50MB文件上传到我的Google云端硬盘帐户上的文件夹。

算法:

  1. Cron触发PHP - PHP转储MySQL数据库并压缩和加密文件;
  2. 相同的PHP脚本会触发另​​一个脚本并提供文件名。此脚本应使用Google Drive API将文件上传到我的Google云端硬盘帐户。
  3. 然后我的Google云端硬盘上的文件应该是blahblahblah/backup.sql.tar.gz

    但事实并非如此。而且我确信所有内容都会在上传结束时失败 - 没有输出。

    我甚至不知道我该如何让客户保密?我尝试了开发控制台,但我只得到:

    CLIENT ID
    CERTIFICATE FINGERPRINTS
    API KEY
    

    到目前为止我已尝试过:

    https://developers.google.com/drive/web/quickstart/quickstart-php https://github.com/google/google-api-php-client/tree/master/examples

    还有这个:

    <?PHP
    /**
     * Insert new file.
     *
     * @param Google_DriveService $service Drive API service instance.
     * @param string $title Title of the file to insert, including the extension.
     * @param string $description Description of the file to insert.
     * @param string $parentId Parent folder's ID.
     * @param string $mimeType MIME type of the file to insert.
     * @param string $filename Filename of the file to insert.
     * @return Google_DriveFile The file that was inserted. NULL is returned if an API error occurred.
     */
    function insertFile($service, $title, $description, $parentId, $mimeType, $filename) {
      $file = new Google_DriveFile();
      $file->setTitle($title);
      $file->setDescription($description);
      $file->setMimeType($mimeType);
    
      // Set the parent folder.
      if ($parentId != null) {
        $parent = new Google_ParentReference();
        $parent->setId($parentId);
        $file->setParents(array($parent));
      }
    
      try {
        $data = file_get_contents($filename);
    
        $createdFile = $service->files->insert($file, array(
          'data' => $data,
          'mimeType' => $mimeType,
          'uploadType' => 'media'
        ));
    
        // Uncomment the following line to print the File ID
        // print 'File ID: %s' % $createdFile->getId();
    
        return $createdFile;
      } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
      }
    }
    

    我使用最新的Google API PHP客户端库。

    我可以使用API​​并上传文件来获得简单的PHP代码吗?

    不涉及用户操作。我不需要授权用户。 一切都应该在服务器端完成。

2 个答案:

答案 0 :(得分:1)

要获取客户ID和公钥,您需要注册您的应用:Google Developers Console

详细文档请访问:Google Drive realtime API quickstart

答案 1 :(得分:1)

Client Secret适用于Web应用程序,其中多个或单个用户必须登录才能授权。您的案例需要一个服务帐户,其中一个帐户处理所有内容,并且只需要可以在脚本中编码的某些参数。

$json = json_decode(file_get_contents("xxxxxx.json"), true);

$CLIENT_ID = $json['client_id'];
$CLIENT_EMAIL = $json['client_email'];
$REDIRECT_URI = "";
$private_key = file_get_contents('xxxxxxxx.p12');
$credentials = new Google_Auth_AssertionCredentials(
    $CLIENT_SECRET,
    $SCOPES,
    $private_key

);
$client = new Google_Client();
$client->setApplicationName("appName");
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
    $client->getAuth()->refreshTokenWithAssertion();
}

使用您的文件填写x,确保下载.json和.p12以便脚本可以读取它。希望它有所帮助。