よく訊ねられる事項 (FAQ) とその答え

クライアント上ではどのようなメソッドが使えますか?

ニフティクラウド SDK for PHPは、サービス記述を参照し、動的に呼び出し先を決める マジックメソッド群__call() を使ってAPIオペレーションを実行します。 クライアント上で動作するマジックメソッドはすべて、クライアントクラスのdocblockに、 @method 記法で記述してあります。 PHPStormZend Studio などのPHP IDEは、 @method 記述に基づく自動補完が可能になっています。 ウェブサービスクライアントから呼び出し可能なメソッドの一覧が、 当該クライアントの API資料ユーザガイド に載っています。

例えばAmazon S3クライアントは、 利用可能な操作 に挙げるオペレーションが可能です。

cURL実行時にSSL証明書エラーが発生した場合、どのような対処が可能ですか?

この問題は期限切れになったCAバンドルをcURLおよびSSLで使おうとすると発生します。 回避するためには、サーバ上のCAバンドルを更新するか、 より新しいCAバンドルを cURLウェブサイトから直接 ダウンロードしてください。

最新のCAバンドルをシステム上の適当な場所にダウンロードし、SDKに対し、 デフォルトのバンドルの代わりに使うよう設定します。 クライアントのファクトリメソッド、または Aws\Common\Aws の設定に、 ssl.certificate_authority を指定してください。

$aws = Aws\Common\Aws::factory(array(
    'region' => 'us-west-2',
    'key'    => '****',
    'secret' => '****',
    'ssl.certificate_authority' => '/path/to/updated/cacert.pem'
));

cURLがCAバンドルを扱う方法について詳しくは、 http://curl.haxx.se/docs/caextract.html を参照してください。

SSLを無効にするにはどうすればよいですか?

Warning

SSLはデータをすべて暗号化するため、単なるTCPに比べて、接続ハンドシェイク処理のために多くのTCPパケットを要します。 したがって、SSLを無効にすれば処理性能が多少改善されるかも知れません。 しかし、データはすべて平文のまま伝送されることになります。 実際に無効にする前に、セキュリティ上の問題がないか、ネットワーク経路上で盗聴されるおそれがないか、充分に検討してください。

クライアントファクトリメソッドに、 scheme パラメータとして 'http' を渡せば、SSLは無効になります。

$client = Aws\DynamoDb\DynamoDbClient::factory(array(
    'region' => 'us-west-2',
    'scheme' => 'http'
));

SDKを高速化するためにはどうすればよいでしょうか?

詳しくは 性能改善ガイド を参照してください。

2GB以上のファイルをアップロード/ダウンロードできないのはなぜですか?

PHPの整数型は符号付きであり、多くのプラットフォームでは32ビット整数になるため、 ニフティクラウド SDK for PHPは32ビットスタック (CPU、OS、ウェブサーバ、PHPバイナリ、その他) 上で、 2GB以上のファイルを正しく扱えません。 これは PHPのよく知られた問題 です。 Microsoft® Windows®の場合、64ビット整数に正式に対応したPHPはありません。

対処法としては、 64ビットLinuxスタック を使うのがお勧めです。 例えば64ビットAmazon Linux AMI (最新のPHPがインストールされた版) があります。

詳しくは「 PHP filesize :Return values 」を参照してください。

回線上でやり取りされるデータを見るにはどうすればよいですか?

Guzzle\Plugin\Log\LogPlugin をクライアントにアタッチすることにより、 回線上を伝わる要求/応答データをすべて見ることができます。 LogPluginは、 Guzzle\Log\LogAdapterInterface インタフェイスを実装していれば、 どのようなロガーとでも連携できます (現状ではMonolog、ZF1、ZF2)。

送信されるデータを簡単に見てみたいだけであれば、 デバッグログプラグインをクライアントにアタッチするだけでも可能です。

use Guzzle\Plugin\Log\LogPlugin;

// Create an Amazon S3 client
$s3Client = S3Client::factory();

// Add a debug log plugin
$s3Client->addSubscriber(LogPlugin::getDebugPlugin());

より複雑なログ出力、あるいはファイルへの出力を実行したいのであれば、LogPluginのインスタンスを生成して組み込むとよいでしょう。

use Guzzle\Common\Log\MonologLogAdapter;
use Guzzle\Plugin\Log\LogPlugin;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// Create a log channel
$log = new Logger('aws');
$log->pushHandler(new StreamHandler('/path/to/your.log', Logger::WARNING));

// Create a log adapter for Monolog
$logger = new MonologLogAdapter($log);

// Create the LogPlugin
$logPlugin = new LogPlugin($logger);

// Create an Amazon S3 client
$s3Client = S3Client::factory();

// Add the LogPlugin to the client
$s3Client->addSubscriber($logPlugin);

LogPluginについてはGuzzleのウェブサイト (http://guzzlephp.org/guide/plugins.html#log-plugin) により詳しい情報があります。

要求に任意のヘッダを設定するにはどうすればよいですか?

command.headers として値を渡すことにより、サービスオペレーションに任意のヘッダを追加できます。 X-Foo-Baz ヘッダをAmazon S3のPutObjectオペレーションに追加する例を示します。

$s3Client = S3Client::factory();
$s3Client->putObject(array(
    'Key'    => 'test',
    'Bucket' => 'mybucket',
    'command.headers' => array(
        'X-Foo-Baz' => 'Bar'
    )
));