J'essaie de créer un compartiment sur le stockage google cloud en utilisant PHP et REST. Je peux très bien créer le seau dans la région des États-Unis, mais je n'arrive pas à en créer un dans la région de l'UE.Comment créer un compartiment dans la région UE?
Voici ce que je fais -
function createBucket($accessToken, $bucket, $region)
{
$version_header = "x-goog-api-version: 2";
$project_header = "x-goog-project-id: ".$this->projectID;
$url = 'https://'.$bucket.'.commondatastorage.googleapis.com';
$timestamp = date("r");
define('XML_PAYLOAD','<xml version=\'1.0\' ? ><CreateBucketConfiguration><LocationConstraint>'.$region.'</LocationConstraint></CreateBucketConfiguration>');
$headers = array(
'Host: '.$bucket.'.commondatastorage.googleapis.com',
'Date: '.$timestamp,
$version_header,
$project_header,
'Content-Length: 0',
'Authorization: OAuth '.$accessToken);
$c = curl_init($url);
curl_setopt($c, CURLOPT_HEADER, 1);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_HTTPHEADER,$headers);
curl_setopt($c, CURLOPT_POSTFIELDS,XML_PAYLOAD);
curl_setopt($c, CURLOPT_CUSTOMREQUEST, "PUT");
$response = curl_exec($c);
curl_close($c);
// split up the response into header and xml body
list($header, $xml) = explode("\r\n\r\n", $response, 2);
// tokenize - first token is the status
$status = strtok($header, "\r\n");
if(stristr($status,"200 OK"))
{
//success
$result = "success";
}
else
{
//failed
$result = "fail";
}
return $result;
}
Cette fonction fonctionne très bien pour un seau américain, mais échoue en cas de l'UE. Je m'assure que le nom généré pour le seau est un nom unique (le même modèle fonctionne pour les seaux US).
éditer: En fait, la fonction n'échoue pas, elle crée un bucket ... elle crée simplement le bucket dans la région US, en dépit de la spécification de la région EU.
Bonjour Marc, Oui J'utilise gsutil pour tester la création d'un compartiment. En fait, je compris que ma demande REST avait une teneur en longueur de 0 et je changé à: 'strlen (XML_PAYLOAD)' et j'ai reçu l'erreur exacte que vous voyez: 'MalformedBucketConfiguration' ' Le Le code XML que vous avez fourni n'était pas bien formé ou n'a pas été validé par rapport à notre schéma publié. » –
Doit également mentionner que j'ai reçu l'erreur pour les régions américaines et européennes –
Votre XML semble manquer le point d'interrogation d'ouverture' Xml ': 'define ('XML_PAYLOAD', ' ...' (c'est le cas [dans le doco] (https://developers.google.com/storage/docs/developer- guide # specifyinglocations) –