今回の実装
Amazon S3 にデータの蓄積を行う。
・データの蓄積は、amazon sdk for phpを使う
・データの閲覧確認としては、S3FSを使う
Amazon php SDKでS3のAPIを使って画像をアップロード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php require_once("aws.phar"); //sdk読み込み use Aws\S3\S3Client; use Aws\Common\Enum\Region; use Aws\S3\Exception\S3Exception; use Aws\S3\Enum\CannedAcl; use Guzzle\Http\EntityBody; // キー、シークレットキー、リージョンを指定 $s3 = S3Client::factory(array( 'key' => 'keyname', 'secret' => 'secret', 'region' => Region::AP_NORTHEAST_1)); //tokyo $bucket = 'bucketname'; $filename = 'test.jpg'; $handle = fopen($filename, 'r'); $response = $s3->putObject( array( 'Bucket' => $bucket, 'Key' => 'key', 'Body' => EntityBody::factory($handle), 'ACL' => CannedAcl::PUBLIC_READ )); |
成功しました。
問題発生
API経由では、データは閲覧可能なのに、S3FSではみれない あれ?
確認したところ
1 |
---------- 1 root root 124510 1月 1 00:00 1970 test.jpg |
S3FSでファイルユーザが[ root ] パーミッションが [ 000 ]おまけにタイムスタンプ1970年
みえない、つかえない、、、、
検索すると
https://code.google.com/p/s3fs/issues/detail?id=321
s3fsはv1.63以降パーミッションの取り扱いがちがう。
解決策
マウントする際に、ユーザとグループを設定するこで閲覧が可能になりました。
1 |
$ /usr/local/bin/s3fs bucketname /share -o rw,allow_other,use_cache=/tmp,uid=uidno,gid=gidno |