【问题标题】:AWS PHP SDK 2 (aws.phar) does not work with Restler FrameworkAWS PHP SDK 2 (aws.phar) 不适用于 Restler 框架
【发布时间】:2013-07-11 23:17:33
【问题描述】:

我一直在测试一些使用 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 p>

为了测试这个测试方法是否写得好,我在 /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 自动加载器在某些情况下无法正常工作。

有什么提示吗?

【问题讨论】:

    标签: php rest amazon-web-services restler


    【解决方案1】:

    这让我耽误了很长时间,

    问题是由设置 spl_autoload_unregiste 的 reslters 自动加载器引起的 如此处所述: https://github.com/Luracast/Restler/issues/72

    解决问题的一种方法是注释掉 vendor/Luracast/Restler/AutoLoader.php 中的相关行

        public static function thereCanBeOnlyOne() {
        if (static::$perfectLoaders === spl_autoload_functions())
            return static::$instance;
    
    /*
        if (false !== $loaders = spl_autoload_functions())
            if (0 < $count = count($loaders))
                for ($i = 0, static::$rogueLoaders += $loaders;
                     $i < $count && false != ($loader = $loaders[$i]);
                     $i++)
                    if ($loader !== static::$perfectLoaders[0])
                        spl_autoload_unregister($loader);
        */
        return static::$instance;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-15
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2020-06-12
      • 2011-06-25
      • 2022-06-24
      相关资源
      最近更新 更多