Ошибки PHP-композитора NoSslException и TransportException.Невозможно найти оболочку https. Не удается установить phpspreadsheet. Ubuntu20.04

( РЕШЕНО НИЖЕ ) Я застрял на несколько дней, пытаясь эффективно использовать композитор для установки phpspreadsheet в проекте php, над которым я работаю. клиент. Поскольку для phpspreadsheet требуется php> = 7.2, я установил несколько версий php (5.6, 7.1,2,3,4, 8.0) на свой диск Linux (ubuntu 20.04.2, фокус LTS). Я удалил сервер Ampps, который был только php7.1. Apache2 уже был установлен. Я установил mysql-server 8.0 после некоторых трудностей (пока не очистил установку ampps).

Composer установился глобально, и я инициализировал базовый composer.json в моем корневом веб-каталоге. Был создан каталог / vendor , содержащий каталог / composer .

Мой последний файл composer.json:

{
    "name": "john/t.cga.it8",
    "description": "cga website",
    "type": "project",
    "license": "proprietary",
    "authors": [
        {
            "name": "John Loughran",
            "email": "example@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}

Если я запустил $ composer Diagnose из корневого веб-каталога в терминале, я получил следующую ошибку:

[Composer\Exception\NoSslException]                                                                        
The openssl extension is required for SSL/TLS protection but is not available. If you can not enable the openssl extension, you can disable 
this error, at your own risk, by setting the 'disable-tls' option to true.

Попытки запустить $ обновление композитора или обновление останавливается с той же ошибкой.

Когда, как было предложено, я настраиваю composer для работы без SSL с помощью $ composer config -g - disable-tls true , я получаю следующее, полностью разноцветное:

You are running Composer with SSL/TLS protection disabled.
Checking composer.json: OK
Checking platform settings: FAIL

The openssl extension is missing, which means that secure HTTPS transfers 
are impossible.
If possible you should enable it or recompile php with --with-openssl

The zlib extension is not loaded, this can slow down Composer a lot.
If possible, enable it or recompile php with --with-zlib

A php.ini file does not exist. You will have to create one.
If you can not modify the ini file, you can also run `php -d option=value` 
to modify ini values on the fly. You can use -d multiple times.

Checking git settings: OK
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: FAIL
[Composer\Downloader\TransportException] The "https://repo.packagist.org 
/packages.json" file could not be downloaded: Unable to find the wrapper 
"https" - did you forget to enable it when you configured PHP? 
failed to open stream: No such file or directory

Composer is configured to disable SSL/TLS protection. This will leave 
remote HTTPS requests vulnerable to Man-In-The-Middle attacks. 
Checking github.com rate limit: FAIL
[Composer\Downloader\TransportException] The "https://api.github.com 
/rate_limit" file could not be downloaded: Unable to find the wrapper 
"https" - did you forget to enable it when you configured PHP? 
failed to open stream: No such file or directory

Checking disk free space: OK
Checking pubkeys: 
Tags Public Key Fingerprint: <I removed the public keys here and below> 
Dev Public Key Fingerprint: 
OK
Checking composer version: Warning: Accessing getcomposer.org over http which is an insecure protocol.
OK

Composer version: 2.0.14
PHP version: 7.4.16
PHP binary path: /usr/local/bin/php 

OpenSSL version: missing
cURL version: missing, using php streams fallback, which reduces performance
zip: extension not loaded, unzip present

Чтобы ответить на некоторые из указывает на ошибки:

  1. Openssl IS установлен с использованием привязок в нестандартных местах.В браузере функция php loaded_extension ('openssl') возвращает значение true. Основываясь на совете от https://www.php.net/manual/en/imap.requirements.php , я сделал символическую ссылку, откуда я нашел файл openssl как: $ ln -s / usr / bin / openssl / usr / local / ssl и аналогично $ ln -s / usr / local / ssl / include / usr / include / openssl .

  2. По совету Люка Веллинга я установил библиотеки JPEG, PNG, IMAP и zlib.

  3. Чтобы решить проблему "отсутствия" php.ini, с терминала я получил:

john@john-desktop:~$ php7.4 -i | grep -i openssl
Warning: PHP Startup: Unable to load dynamic library 'openssl' (tried: 
/usr/lib/php/20190902/openssl (/usr/lib/php/20190902/openssl: cannot open
 shared object file: No such file or directory), /usr/lib/php/20190902
/openssl.so (/usr/lib/php/20190902/openssl.so: cannot open shared object 
file: No such file or directory)) in Unknown on line 0

SSL Version => OpenSSL/1.1.1f
libSSH Version => libssh/0.9.3/openssl/zlib
openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.1.1f  31 Mar 2020
OpenSSL Header Version => OpenSSL 1.1.1f  31 Mar 2020
Openssl default config => /usr/lib/ssl/openssl.cnf
openssl.cafile => no value => no value
openssl.capath => no value => no value
Native OpenSSL support => enabled

Возможно, мои символические ссылки неверны? Некоторая конфигурация кажется неправильной, но я не знаю, как ее исправить.

У меня есть файлы php.ini. Для php7.4 основной, который показывает phpinfo (), загружается (в браузере), находится в /etc/php/7.4/fpm/ . Я оставил это без изменений, но добавил файл phpcustomjl.ini (с приоритетом 01) в /etc/php/7.4/mods-enabled/ , который связан системой с ] /etc/php/7.4/fpm/conf.d/ . Он отображается в phpinfo () из браузера среди проанализированных дополнительных файлов .ini. Я научился использовать $ sudo systemctl restart php7.4-fpm после внесения в него изменений, чтобы эти изменения вступили в силу. Соответствующие строки из файла .ini:

extension=zlib
;extension=/usr/lib/ssl
;extension=/usr/bin/openssl
extension=openssl
;extension=php_openssl

$ php7.4 --ini показывает, что этот файл загружен в cli. Он выводит:

Warning: PHP Startup: Unable to load dynamic library 'openssl' (tried: /usr/lib/php/20190902/openssl (/usr/lib/php/20190902/openssl: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/openssl.so (/usr/lib/php/20190902/openssl.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

Warning: Module 'curl' already loaded in Unknown on line 0
Configuration File (php.ini) Path: /etc/php/7.4/cli
Loaded Configuration File:         /etc/php/7.4/cli/php.ini
Scan for additional .ini files in: /etc/php/7.4/cli/conf.d
Additional .ini files parsed:      /etc/php/7.4/cli/conf.d/01-phpcustomjl.ini,

Это показывает, что пользовательский ini-файл читается из cli, поэтому, возможно, некоторые настройки в нем должны быть неправильными?

  1. Когда я запускаю $ php -v в терминале I получить PHP 7.4.16 (cli) .В браузере, когда я хочу включить php7.4 (как сейчас), я использую файл .htaccess в корневом веб-каталоге с прокси SetHandler: unix: / var / run / php /php7.4-fpm.sock|fcgi://localhost/" в директиве.

Надеюсь, у меня есть достаточно подробностей, чтобы кто-нибудь мог разобраться в проблеме или предложить какие-либо стратегии. А пока я застрял! Любая помощь, которую вы можете предложить, будет принята с благодарностью. : -) Джон

0
задан 31 May 2021 в 19:06

1 ответ

РЕШЕНИЕ : у меня установлено так много отдельных установок php, что композитор не знал, в какой из них искать openssl или php.ini.

Приведенный ниже способ вывода показывает, что из интерфейса командной строки команда php просматривала каталог, в котором не существовало файла php.ini (/ usr / local / lib), тогда как команда php7.4 находилась в нужном месте.

Я удалил и переустановил openssl и composer и собирался начать работу на php, когда попробовал приведенные ниже команды.

Теперь я могу правильно использовать композитор без ошибок в моем каталоге проекта, просто набрав

project-dir $ php7.4 / home / john / bin / composer update

вместо

project- dir $ composer update

и так далее. Одна большая головная боль прошла!

0
ответ дан 28 July 2021 в 11:36

Другие вопросы по тегам:

Похожие вопросы: