PHP file upload to a Google storage bucket

Download

bucket_upload_1.0.php.gz

Google setup & use

1- Create a storage bucket for the script to upload into

 

Go to the Google Cloud Console, click on “Storage”, “Browser”.

 

“Create Bucket”

 

Give it a name and click “Create”.

 

2- Create a service account for the script

Expand the “IAM & admin” section, click on “Service accounts”.

 

Click “Create Service Account”.

 

Give it a name, check “Furnish a new private key”, JSON, and click “Save”.

 

Save the JSON credentials file which you are prompted to download into a safe location.

3- Grant “Object Creator” permissions on the bucket to the service account

Go back to the storage bucket you created

 

Edit its permissions

 

The JSON credentials file you just downloaded contains the email for the service account you created, copy it.

 

And paste it into the “Add members” field, select the permission to be “Storage Object Creator”. This service account doesn’t need permissions for anything else than dumping files in there. Not even viewing them.

 

Optional: if you want the files uploaded by the script to be publicly viewable, add the permission “Storage Object Viewer” to the user “allUsers”. Accounts are all referred to by email in Google land, but there exist special keywords such as “allUsers”.

Done with the Google setup 🙂

4- Running the script

If you haven’t already, download the script at the top of this page. Decompress it and edit the config at the top.

$credentials_file_path is the full path to the JSON credentials file you got from Google when you created the service account. It should be a secure location.

$destination_bucket_name is the name of the bucket you created

$access_token_cache_file_path is a location where Google’s OAuth tokens are cached, it too should be a secure location.

Run the script with only 1 argument being the file you want to upload. The script can also be included and used outside of CLI, in that case simply call the upload( $filename ) function.

The script returns the URL to the file in the bucket.

Voilà:

A small milestone

The millionth penstroke on Mandalagaba since the code rewrite last February

There’s more data I’d like to pull out of this. For example the average length of a stroke, average time, how many human lives where spent drawing mandalas, et cetera :).

Counter Measures

The fauna has taken a huge bite out of our work this year. A woodchuck ate the garden, crows ravaged the blueberry plants, deer went after young fruit trees & currants, finally a racoon simply killed all the keets and didn’t even eat them. One animal after another has gone after our work and voided much of it, this is the first year this happens to such a scale and it is making us feel besieged.

It’s interesting just how much brutal competition there is in nature. I used to think of nature as an idealized garden of Eden, but it’s closer to a ruthless competition which often ends in death. I despise man’s expansionist dominance over nature, yet living closer to nature means participating in the competition. Hawks circles over our baby, ticks & mosquitoes suck our blood, raccoons take out our flocks, deer reap the fruits of our sweat. I’m fine with letting nature get its share but nature is perfectly fine taking it all. I don’t enjoy exerting human dominance but I can’t let that go, it’s time to be more aggressive.

 

Intel gathering

 

The little fuckers parade around the chicken coop like they own the place

 

Unfortunately not at a set time at which I could throw them a little welcome party

 

A trap does stay up all night, notice to pull string in case the skunk gets in there

 

Well at least I caught something with the box the trap came in

 

Super scary scarecrow

 

The trees are now in prison until they have more mass