Проблемы с пространством имен пакетов Composer с помощью php-scoperPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Проблемы с пространством имен пакетов Composer с помощью php-scoper

Сообщение Anonymous »

У меня есть PHP-приложение, для которого требуется AWS PHP SDK. Я включаю его с помощью Composer, для которого требуется пакет GuzzleHttp. В этом простом фрагменте кода перечислены сегменты S3, доступные через API:

Код: Выделить всё

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
use GuzzleHttp\Psr7\Utils;

aws_sdk_connect($region,$creds);

function aws_sdk_connect($region,$creds)
{
$s3Client = new S3Client(['region' => $region, 'version' => 'latest', 'credentials' => $creds]);
$buckets = $s3Client->listBuckets();
foreach ($buckets['Buckets'] as $bucket) {
echo $bucket['Name'];
}

}
Этот код работает нормально и возвращает доступные сегменты S3. Однако недавно мы столкнулись с конфликтами пространства имен с обязательными пакетами, которые также требуют GuzzleHttp, предположительно потому, что им требуются разные версии. Я работаю в Wordpress, поэтому не могу ничего поделать с требованиями к пакетам других разработчиков плагинов. Чтобы решить эту проблему, я пытаюсь использовать php-scoper для распределения имен моих файлов и пакетов композитора. После запуска php-scoper на приведенном выше базовом тестовом коде файлы поставщиков помещаются в пространство имен, и мой приведенный выше код становится следующим:

Код: Выделить всё

require 'vendor/autoload.php';

use _PhpScoper87b4a9639731\Aws\S3\S3Client;
use _PhpScoper87b4a9639731\Aws\S3\Exception\S3Exception;
use _PhpScoper87b4a9639731\GuzzleHttp\Psr7\Utils;

aws_sdk_connect($region,$creds);

function aws_sdk_connect($region,$creds)
{
$s3Client = new S3Client(['region' => $region, 'version' => 'latest', 'credentials' => $creds]);
$buckets = $s3Client->listBuckets();
foreach ($buckets['Buckets'] as $bucket) {
echo $bucket['Name'];
}

}
После запуска php-scoper для просмотра пространства имен моих файлов поставщика этот код выдает следующую ошибку:

Код: Выделить всё

"Fatal error: Uncaught RuntimeException: Unable to determine what Guzzle version is installed. in /build/vendor/aws/aws-sdk-php/src/functions.php:305"
Вот соответствующая функция в строке 305 из aws-sdk-php:

Код: Выделить всё

function guzzle_major_version()
{
static $cache = null;
if (null !== $cache) {
return $cache;
}
if (\defined('\\GuzzleHttp\\ClientInterface::VERSION')) {
$version = (string) ClientInterface::VERSION;
if ($version[0] === '6') {
return $cache = 6;
}
if ($version[0] === '5') {
return $cache = 5;
}
} elseif (\defined('\\GuzzleHttp\\ClientInterface::MAJOR_VERSION')) {
return $cache = ClientInterface::MAJOR_VERSION;
}
throw new \RuntimeException('Unable to determine what Guzzle version is installed.');
}
Я использую файл конфигурации по умолчанию для php-scoper, а затем запускаю Composer dump-autoload, чтобы перестроить файлы автозагрузки. Что мне нужно сделать по-другому, чтобы разместить в пространстве имен файлы поставщиков? Спасибо,

Подробнее здесь: https://stackoverflow.com/questions/784 ... php-scoper
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»