( РЕШЕНО НИЖЕ ) Я застрял на несколько дней, пытаясь эффективно использовать композитор для установки 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
Чтобы ответить на некоторые из указывает на ошибки:
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
.
По совету Люка Веллинга я установил библиотеки JPEG, PNG, IMAP и zlib.
Чтобы решить проблему "отсутствия" 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, поэтому, возможно, некоторые настройки в нем должны быть неправильными?
$ php -v
в терминале I получить PHP 7.4.16 (cli)
.В браузере, когда я хочу включить php7.4 (как сейчас), я использую файл .htaccess
в корневом веб-каталоге с прокси SetHandler: unix: / var / run / php /php7.4-fpm.sock|fcgi://localhost/"
в директиве.Надеюсь, у меня есть достаточно подробностей, чтобы кто-нибудь мог разобраться в проблеме или предложить какие-либо стратегии. А пока я застрял! Любая помощь, которую вы можете предложить, будет принята с благодарностью. : -) Джон
РЕШЕНИЕ : у меня установлено так много отдельных установок 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
и так далее. Одна большая головная боль прошла!