How to generate Signed URL for google cloud storage objects using PHP
google-app-engine, google-cloud-storage, php
Solution
You can try Google Cloud Storage PHP SDK, it's a good choice for keeping your codes clean.
cloud-storage PHP SDK
Install package to your project by following this page on Packagist, then
function getSignedGcsUrl($objPath/* which is your target object path */, $duration = 50)
{
$storageClient = new StorageClient([
'projectId' => /* your gcp projectId here */,
'keyFilePath' => /* your gcp keyFilePath here */,
]);
$bucket = $storageClient->bucket($objPath);
$object = $bucket->object();
$url = $object->signedUrl(new \DateTime('+ ' . $duration . ' seconds'));
return $url;
}
laravel-google-cloud-storage (for Laravel)
Install and configurate superbalist/laravel-google-cloud-storage by following this page: on Github, then
public static function getSignedGcsUrl($objPath, $duration = 50)
{
return Storage::disk('gcs'/* following your filesystem configuration */)
->getAdapter()
->getBucket()
->object($objPath)
->signedUrl(new \DateTime('+ ' . $duration . ' seconds'));
}
Problem
The method i tried using was with openssl ``` $fp = fopen($key, 'r'); //open the PEM file $priv_key = fread($fp,8192); fclose($fp); $pkeyid = openssl_get_privatekey($priv_key,"password"); openssl_sign($response["data_to_sign"], $signature, $pkeyid,'sha256'); $sign = base64_encode($signature) ``` Is this the correct Method to generate signature for signed urls in google?