LoginSignup
1
0

More than 5 years have passed since last update.

conohaのオブジェクトストレージをopenstackでPHPから使う(2019年)

Last updated at Posted at 2019-04-05

はい、S3使ったら苦労はないということはわかってます、ただ、転送量無料は正義です。
リファレンスも少しわかりにくかったので、メモ。

$optionsの内容についてはconohaの管理画面にある。

使ってるopenstackは▽
https://github.com/php-opencloud/openstack/blob/master/doc/index.rst

まずは、composerで入れてね。

$ composer require php-opencloud/openstack

use OpenStack\OpenStack;
use Guzzle\Http\Exception\ClientErrorResponseException;
use GuzzleHttp\Psr7\Stream;

       $options = [
            'authUrl' => env('CONOHA_AUTH_URL'),  // APIの認証URL
            'username' => env('CONOHA_USERNAME'),  // API ユーザーのユーザー名
            'password' => env('CONOHA_PASSWORD'),      // API ユーザーのパスワード
            'tenantName' => env('CONOHA_TENANT_NAME'),  // テナント情報のテナント名
        ];

        try {
            $client = new OpenStack($options);
            $identityService = $client->identityV2();

            $service = $client->objectStoreV1([
                'identityService' => $identityService,
                'catalogName' => 'Object Storage Service',
            ]);

            //コンテナの存在確認
            //ここはもしかすると作成だけでも良いかもしれない
            if ($service->containerExists('test')) {
                $container = $service->getContainer('test');
            }else{
                //コンテナが存在しない場合はコンテナを作成する
                $container_name = array(
                    'name' => 'test',
                    'readAccess' => '.r:*' //パブリックアクセスにする
                );
                $container = $service->createContainer($container_name);
            }

            //gazelleでアップするファイルを読み込み
            $stream = new Stream(fopen('/var/www/html/app/webroot/img/unko.png', 'r'));

            $file_option = [
                'name'   => 'unko.png',  //オブジェクトストレージ保存するファイル名
                'stream' => $stream,     //これはファイルの本体データ
            ];

            //ファイル(オブジェクトをアップする)
            $container->createObject($file_option);

            // コンテナ内のオブジェクト一覧の取得
            $objects = $container->listObjects();

            // コンテナの中のオブジェクトのパブリックURLを取得する
            foreach ($objects as $object) {
                $images_url[] = $object->getPublicUri();
            }

続いて、ACL関係も調査予定。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0