将 GCP 存储挂载为文件系统,并使用 php 访问
主要是使用gcsfuse 这个工具,还有就是使用Google\Cloud\Storage\StorageClient 这个套件
mount as filesystem
Google cloud plateform 提供了gcsfuse 这个工具可以mount bucket storage 到档案系统中,方法如下;
$ export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s` $ echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list $ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install gcsfuse $ sudo mkdir /photovideo $ sudo gcsfuse photovideo /photovideo/ $ sudo ls -al /photovideo-ulsee
要unmount 也很简单
$ fusermount -u /home/shared/local_folder/
access with php
要透过php 存取的话,需要使用google api,可以在这边找到,透过composer就可以安装完成。
比较繁琐的是在access authentication 部分,虽然在机器上安装cloud sdk 后,便可如同alibabacloud oss 一样,mount 上去之后就可以当成跟一般档案存取一样直接读写。但是Google 并不建议这样使用,主要是怕被破台后整个storage被看光光,所以建议透过api来进行(可以参考Authentication Guide )。
遵照Authentication Guide 产生json 格式的key 之后存档,比方说存在呼叫php 档的上层路径,为../service_api_key.json ,然后就可以引用google cloud storage library,透过这个keyfile 存取储存空间了。
<?php require '../vendor/autoload.php'; use Google\Cloud\Storage\StorageClient; use Google\Cloud\Core\ServiceBuilder; .... .... class UploadsController extends ControllerBase { public function test() { //.... //.... $storage = new StorageClient([ 'keyFilePath' => '../service_api_key.json' ]); $storage->registerStreamWrapper(); $files[0]->moveTo($this->storageconfig->tmp . $upload->upload1); exec("sudo mv " . $this->storageconfig->tmp . $upload->upload1 . " " . $this->storageconfig->upload . $upload->upload1); //.... //.... // read file $target_file_gs = "gs://gcp-test-storage/source/". $upload->upload1; readfile($target_file_gs); } }
主要透过new StorageClient 并给予key file,然后呼叫registerStreamWrapper() 取得存取权限。比较奇妙的是,当作档案上传时,必须先存到local file 后再搬到gcp storage 去,所以同时也要记得打开www server 的sudo mv 权限。
Original link: Phanix's Blog
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!