private function isBucketWritable($bucket) {
    $cache_key_name = sprintf(parent::WRITABLE_MEMCACHE_KEY_FORMAT, $bucket);
    $memcache = new \Memcache();
    $result = $memcache->get($cache_key_name);

    if ($result) {
      return $result['is_writable'];
    }

    // We determine if the bucket is writable by trying to start a resumable
    // upload. GCS will cleanup the abandoned upload after 7 days, and it will
    // not be charged to the bucket owner.
    $token_header = $this->getOAuthTokenHeader(parent::WRITE_SCOPE);
    if ($token_header === false) {
      return false;
    }
    $headers = array_merge(parent::$upload_start_header, $token_header);
    $url = parent::createObjectUrl($bucket, parent::WRITABLE_TEMP_FILENAME);
    $http_response = $this->makeHttpRequest($url,
                                            "POST",
                                            $headers);

    if ($http_response === false) {
      return false;
    }

    $status_code = $http_response['status_code'];
    $is_writable = $status_code == HttpResponse::CREATED;

    $memcache->set($cache_key_name,
                   ['is_writable' => $is_writable],
                   null,
                   $this->context_options['writable_cache_expiry_seconds']);
    return $is_writable;
  }
private function isBucketWritable($bucket) {
    $cache_key_name = sprintf(parent::WRITABLE_MEMCACHE_KEY_FORMAT, $bucket);
    $memcache = new \Memcache();
    $result = $memcache->get($cache_key_name);

    if ($result) {
      return $result['is_writable'];
    }

    // We determine if the bucket is writable by trying to start a resumable
    // upload. GCS will cleanup the abandoned upload after 7 days, and it will
    // not be charged to the bucket owner.
    $token_header = $this->getOAuthTokenHeader(parent::WRITE_SCOPE);
    if ($token_header === false) {
      return false;
    }
    $headers = array_merge(parent::$upload_start_header, $token_header);
    $url = parent::createObjectUrl($bucket, parent::WRITABLE_TEMP_FILENAME);
    $http_response = $this->makeHttpRequest($url,
                                            "POST",
                                            $headers);

    if ($http_response === false) {
      return false;
    }

    $status_code = $http_response['status_code'];
    $is_writable = $status_code == HttpResponse::CREATED;

    $memcache->set($cache_key_name,
                   ['is_writable' => $is_writable],
                   null,
                   $this->context_options['writable_cache_expiry_seconds']);
    return $is_writable;
  }
private function isBucketWritable ( $ bucket ) { $ cache_key_name = sprintf ( parent :: WRITABLE_MEMCACHE_KEY_FORMAT , $ bucket ) ; $ memcache = new \ Memcache ( ) ; $ result = $ memcache -> get ( $ cache_key_name ) ; if ( $ result ) { return $ result [ 'is_writable' ] ; } // We determine if the bucket is writable by trying to start a resumable // upload. GCS will cleanup the abandoned upload after 7 days, and it will // not be charged to the bucket owner. $ token_header = $ this -> getOAuthTokenHeader ( parent :: WRITE_SCOPE ) ; if ( $ token_header === false ) { return false ; } $ headers = array_merge ( parent :: $ upload_start_header , $ token_header ) ; $ url = parent :: createObjectUrl ( $ bucket , parent :: WRITABLE_TEMP_FILENAME ) ; $ http_response = $ this -> makeHttpRequest ( $ url , "POST" , $ headers ) ; if ( $ http_response === false ) { return false ; } $ status_code = $ http_response [ 'status_code' ] ; $ is_writable = $ status_code == HttpResponse :: CREATED ; $ memcache -> set ( $ cache_key_name , [ 'is_writable' => $ is_writable ] , null , $ this -> context_options [ 'writable_cache_expiry_seconds' ] ) ; return $ is_writable ; }
Test if a given bucket is writable. We will cache results in memcache as
this is an expensive operation. This might lead to incorrect results being
returned for this call for a short period while the result remains in the
cache.
Test if a given bucket is writable . We will cache results in memcache as this is an expensive operation . This might lead to incorrect results being returned for this call for a short period while the result remains in the cache .