LoginSignup
5
9

More than 5 years have passed since last update.

PHPでAWSへ接続して、CSVデータを取り込む

Last updated at Posted at 2018-04-02

概要

PHPでAWSを使うことがあったので調べた内容をメモしておく

AWS SDK for PHP

最新だと3.53のようなので、それと使ってみる。

phpのComposerを使ってインストールします。

ターミナル
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar require aws/aws-sdk-php

まずやってみる

とりあえず、接続してデータを取ってきてみる。

example1.php
<?php
require __DIR__ . '/vendor/autoload.php';
use Aws\S3\S3Client;

// AWSのS3からCSVファイルを取得する
$client = Aws\S3\S3Client::factory([
    'credentials' => [
        'key'    => '***************',
        'secret' => '********************************',
    ],
    'region'  => 'ap-northeast-1',
    'version' => 'latest'
]);
$result = $client->getObject([
    'Bucket' => 'hoge-data',
    'Key'    => 'goods/20180101.csv'
]);

// CSVファイルの中身を取得する
$data = array();
if ($result['Body']) {
    $stream = $result['Body'];
    $stream->rewind();
    $csv = $stream->getContents();

    $fp = tmpfile();
    fwrite($fp, $csv);
    rewind($fp);
    while ($row = fgetcsv($fp, 4096)) {
        $data[] = $row
    }
    fclose($fp);
}
var_dump($data);

credentials情報を分離する (credentials.ini)

credentials情報をPHPファイルに記述したくないので、分離してみる。

credentials.ini
[default]
aws_access_key_id = '****************'
aws_secret_access_key = '**************************'
example2.php
<?php
require __DIR__ . '/vendor/autoload.php';
use Aws\Credentials\CredentialProvider;

// AWSのS3からCSVファイルを取得する
$ini = __DIR__ . '/credentials.ini';
$iniProvider = CredentialProvider::ini('default', $ini);
$iniProvider = CredentialProvider::memoize($iniProvider);
$client = new Aws\S3\S3Client([
    'credentials' => $iniProvider,
    'region'      => 'ap-northeast-1',
    'version'     => 'latest'
]);
$result = $client->getObject([
    'Bucket' => 'hoge-data',
    'Key'    => 'fuga/20180101.csv'
]);

// CSVファイルの中身を取得する
$data = array();
if ($result['Body']) {
    $stream = $result['Body'];
    $stream->rewind();
    $csv = $stream->getContents();

    $fp = tmpfile();
    fwrite($fp, $csv);
    rewind($fp);
    while ($row = fgetcsv($fp, 4096)) {
        $data[] = $row
    }
    fclose($fp);
}
var_dump($data);

credentials情報を分離する (~/.aws/credentials)

credentials情報をPHPファイルに記述したくないので、分離してみる。

~/.aws/credentials
[default]
aws_access_key_id = '****************'
aws_secret_access_key = '**************************'
example3.php
<?php
require __DIR__ . '/vendor/autoload.php';
use Aws\Sdk;

// AWSのS3からCSVファイルを取得する
$sdk = new Sdk([
    'profile' => 'default',
    'region'  => 'ap-northeast-1',
    'version' => 'latest'
]);
$client = $sdk->createS3();
$result = $client->getObject([
    'Bucket' => 'hoge-data',
    'Key'    => 'fuga/20180101.csv'
]);

// CSVファイルの中身を取得する
$data = array();
if ($result['Body']) {
    $stream = $result['Body'];
    $stream->rewind();
    $csv = $stream->getContents();

    $fp = tmpfile();
    fwrite($fp, $csv);
    rewind($fp);
    while ($row = fgetcsv($fp, 4096)) {
        $data[] = $row
    }
    fclose($fp);
}
var_dump($data);

参考サイト

5
9
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
5
9