PHP: Не понимаю систему расширений - PullRequest
0 голосов
/ 05 августа 2020

Недавно мне нужно было сделать многопоточность с PHP, поэтому я скомпилировал версию 7.4 из источника, чтобы включить режим ZTS (требуется для использования нового расширения Parallel):

  • Я клонировал PHP исходное репо на моем сервере

  • git checkout PHP-7.4

  • ./buildconf --force

  • I взял эту строку конфигурации из учебника, я должен признать, что не совсем понял все параметры:

    CONFIGURE_STRING = "- prefix = / etc / phpzts --with-bz2 --with-zlib --enable-zip --disable-cgi --enable- soap --enable-intl --with-openssl --with-readline --with-curl --enable-ftp --enable-mysqlnd --with-mysqli = mysqlnd --with-pdo-mysql = mysqlnd --enable-sockets --enable-pcntl --with-pspell --with-enchant --with-gettext --with-gd --enable-exif --with-jpeg-dir --with-png-dir --with-freetype-dir --with-xsl --enable-bcmath --enable-mbstring --enable-calendar --enable-simple xml --enable- json --enable-ha sh --enable-session --enable- xml --enable-wddx --enable-opcache --with-pcre-regex --with-config-file-path = / etc / phpzts / config --with-config-file-scan-dir = / etc / phpzts / config --enable-cli --enable-debug --enable-fpm --with-fpm-user = www-data --with-fpm-group = www-data --with-mcrypt --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-shmop --enable-parallel --enable-keeper-zts "

  • ./configure $CONFIGURE_STRING

  • make && make install

  • скопировал файл php .ini из репозитория php -sr c в phpzts / config (подтвердил, что он был успешно загружен, выполнив /etc/phpzts/bin/php --ini)

Все функции которые должны быть загружены из php расширений, хорошо работают в моих сценариях, особенно функции mb_string, openssl, параллельные функции. Вот чего я не понимаю . Я ожидал установить их через apt-get install php7.4-mbstring например, как и то, что я делаю с другим php, установленным для apache. Все расширения прокомментированы в шаблоне файла php .ini, который я только что скопировал из исходного репозитория:

;extension=imap
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
...

Несмотря на то, что все прокомментировано, похоже, что все эти библиотеки загружены php, потому что я обнаружил их строки при вводе /etc/phpzts/bin/php -m и могу их использовать. Как их можно загрузить, пока они прокомментированы в php .ini файл?

Более того, когда я раскомментирую extension=openssl например, php говорит «невозможно загрузить динамическую c librairy». Папка extension_dir не содержит ничего, кроме файла с именем opcache.so и еще одного файла opcache.a.

Как php может фактически загрузить все эти расширения, когда в папке расширений ничего нет? Почему openssl загружен (я могу использовать в нем функции), но php по-прежнему говорит: «Не удается загрузить Dynami c librairy», когда я раскомментирую строку extension=openssl в php .ini? Почему мне нужно запускать apt-get install php7.4-mbstring, если я хочу установить расширение php для apache версии php, хотя похоже, что все расширения предустановлены?

1 Ответ

1 голос
/ 05 августа 2020

Вы скомпилировали stati c модулей в двоичный файл php. Посмотрите здесь http://www.phpinternalsbook.com/php5/build_system/building_extensions.html

Как вы уже знаете из предыдущего раздела, расширения PHP могут быть статически встроены в двоичный файл PHP или скомпилированы в общий объект (.so). Связь Stati c используется по умолчанию для большинства связанных расширений, тогда как общие объекты могут быть созданы путем явной передачи --enable-EXTNAME = shared или --with-EXTNAME = shared в ./configure.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...