我一直在测试一些使用 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 自动加载器在某些情况下无法正常工作。
有什么提示吗?