Composer, импортированный из репозитория, не распознает некоторые встроенные расширения PHP (Docker).Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Composer, импортированный из репозитория, не распознает некоторые встроенные расширения PHP (Docker).

Сообщение Anonymous »

Я пытаюсь установить зависимости проекта с помощью Composer в контейнере Docker на основе образа php:8.3-fpm-alpine. Этот образ включает PHP с несколькими расширениями, скомпилированными и интегрированными в двоичный файл PHP, что подтверждено функцией phpinfo():

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

Configuration File (php.ini) Path
=> /usr/local/etc/php
________________________________________________________________

Configuration
Core

PHP Version => 8.3.15

extension_dir => /usr/local/lib/php/extensions/no-debug-non-zts-20230831
include_path => .:/usr/local/lib/php

Tokenizer Support => enabled
Session Support   => enabled
fileinfo support  => enabled
SimpleXML support => enabled
DOM/XML           => enabled
Multibyte Support => enabled
XMLReader         => enabled
XMLWriter         => enabled

...
Однако, когда я выполняю команду установки композитора, Composer не может распознать доступность некоторых из этих расширений.
Ошибки, которые я получаю:

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

Problem 1..N
- requires ext-session *
- requires ext-fileinfo *
- requires ext-tokenizer *
- requires ext-dom *

* -> it is missing from your system. Install or enable PHP's session extension.

Your lock file does not contain a compatible set of packages.
Please run composer update.

To enable extensions, verify that they are enabled in your .ini files:
- /etc/php83/php.ini
- /etc/php83/conf.d/00_curl.ini
- /etc/php83/conf.d/00_iconv.ini
- /etc/php83/conf.d/00_mbstring.ini
- /etc/php83/conf.d/00_openssl.ini
- /etc/php83/conf.d/00_zip.ini
- /etc/php83/conf.d/01_phar.ini
Результаты диагностики композитора:

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

...

Checking Composer version: OK
Checking Composer and its dependencies for vulnerabilities: OK
Composer version: 2.8.4
PHP version: 8.3.15
PHP binary path: /usr/bin/php83
OpenSSL version: OpenSSL 3.3.2 3 Sep 2024
curl version: 8.11.1 libz 1.3.1 ssl OpenSSL/3.3.2
Мой файл Docker:

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

FROM php:8.3-fpm-alpine

WORKDIR /var/www/html
COPY --chown=www-data:www-data --chmod=644 composer.json composer.lock .

RUN apk update \
&& apk upgrade \
&& mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" \
&& apk add --no-cache \
libpq-dev \
composer \
&& docker-php-ext-configure pdo_pgsql \
--with-pdo-pgsql=/usr/local/include/php \
&& composer install pgsql pdo_pgsql \
&& docker-php-ext-enable pgsql pdo_pgsql \
&& rm -vrf /var/cache/apk/*

USER www-data

EXPOSE 9000
CMD ["php-fpm"]
После дальнейшего изучения проблемы я обнаружил, что ручная установка Composer в контейнере Docker устранила несоответствие между phpinfo() и обнаружением расширений Composer. Я использовал следующие методы с официального сайта Composer:
Метод 1:

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

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
Метод 2: программная установка
Метод 3:

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

wget -O /usr/local/bin/composer \
https://distfiles.alpinelinux.org/distfiles/edge/composer-2.8.4.phar
Проверка во время диагностики с помощью команды композитора:

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

...

Checking Composer version: OK
Checking Composer and its dependencies for vulnerabilities: OK
Composer version: 2.8.4
PHP version: 8.3.15
PHP binary path: /usr/local/bin/php
OpenSSL version: OpenSSL 3.3.2 3 Sep 2024
curl version: 8.11.1 libz 1.3.1 ssl OpenSSL/3.3.2
Не могу понять, кто именно вызывает ошибку: композитор или сам репозиторий.


Подробнее здесь: https://stackoverflow.com/questions/793 ... hp-extensi
Ответить

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

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

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

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

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