aws-sdk-php を使用して S3 ストレージにファイルをアップロードするいくつかの PHP スクリプトをテストしています。これらのスクリプトは、ブラウザーから直接実行するとうまく動作するように見えますが、Luracast Restler 3.0 の API クラスを介して使用しようとすると失敗します。
ダミー ファイルをアップロードするサンプル スクリプトは次のようになります。
<?php
require_once (dirname(__FILE__) . "/../lib/aws/aws.phar");
use Aws\Common\Aws;
use Aws\S3\Enum\CannedAcl;
use Aws\S3\Exception\S3Exception;
use Aws\Common\Enum\Region;
function test(){
// Instantiate an S3 client
$s3 = Aws::factory(array(
'key' => 'key',
'secret' => 'secret',
'region' => Region::EU_WEST_1
))->get('s3');
try {
$s3->putObject(array(
'Bucket' => 'my-bucket',
'Key' => '/test/test.txt',
'Body' => 'example file uploaded from php!',
'ACL' => CannedAcl::PUBLIC_READ
));
} catch (S3Exception $e) {
echo "There was an error uploading the file.\n";
}
}
このスクリプトは/util/test.phpフォルダーに配置され、aws-php-sdk は/lib/aws/aws.pharにあります。
このテスト メソッドが適切に記述されていることをテストするために、次のコードを使用して/test/upload.phpに別の php スクリプトを作成しました。
<?php
require_once (dirname(__FILE__) . '/../util/test.php');
test();
したがって、ブラウザにhttp://mydomain.com/test/upload.phpと入力すると、すべてが期待どおりに機能し、ファイルが S3 ストレージにアップロードされます。
ただし、Restler フレームワークを使用して API クラスから関数 test() を呼び出すと、Aws が見つからないというエラーが表示されます。
Fatal error: Class 'Aws\Common\Aws' not found in /var/app/current/util/test.php on line 12
ただし、コードはまったく同じで、upload.php から呼び出されたときに完全に機能します。ここで何が起こっているのかを把握するために何時間も費やしてきましたが、結論を得ることができません。aws-php-sdk オートローダが状況によってはうまく動作しないようなものです。
ヒントはありますか?