AWS PHP SDK 2 (aws.phar) не работает с Restler Framework

Я тестировал некоторые PHP-скрипты, которые используют aws-sdk-php для загрузки файлов в хранилище S3. Эти сценарии, похоже, работают хорошо, когда они выполняются непосредственно из браузера, но не удается при попытке использовать его через класс API в Luracast Restler 3.0

Пример сценария, который загружает некоторый фиктивный файл, выглядит следующим образом:

<?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

Чтобы проверить, что этот тестовый метод хорошо написан, я создал еще один php-скрипт в /test/upload.php со следующим кодом:

 <?php require_once (dirname(__FILE__) . '/../util/test.php'); test(); 

Поэтому я могу войти в браузер http://mydomain.com/test/upload.php, и все работает как ожидалось, и файл загружается в хранилище S3.

Однако, когда я вызываю функцию test () из класса API с инфраструктурой Restler, у меня есть ошибка, которая говорит, что Aws не может быть найден:

 Fatal error: Class 'Aws\Common\Aws' not found in /var/app/current/util/test.php on line 12 

Однако код точно такой же, который отлично работает при вызове из upload.php. Я тратил время на то, чтобы выяснить, что здесь происходит, но я не могу сделать никакого вывода. Это похоже на то, что автозагрузчик aws-php-sdk не работает хорошо при некоторых обстоятельствах.

Любые намеки?

Это задержало меня на некоторое время,

Проблема вызвана автозагрузчиком reslters, который устанавливает spl_autoload_unregiste, как описано здесь: https://github.com/Luracast/Restler/issues/72

Один из способов решения проблемы состоит в том, чтобы прокомментировать соответствующие строки в поставщике / 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; }