首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP :不懂扩展系统

PHP :不懂扩展系统
EN

Stack Overflow用户
提问于 2020-08-05 19:19:55
回答 1查看 74关注 0票数 0

我最近需要使用PHP进行多线程处理,所以我从源代码编译了7.4版本,启用了ZTS模式(需要使用并行的新扩展):

  • 我在我的服务器

上克隆了PHP源代码回购

  • git checkout PHP-7.4

  • ./buildconf --force

  • --我从教程中获取了这个配置字符串,我不得不承认,我并没有真正理解所有的选项:

CONFIGURE_STRING=“-前缀=/etc/phpzts-with-bz2-具有-zlib-启用-zip-禁用-cgi

-启用-soap-启用-intl-与-openssl-与-readline-具有-curl-启用-ftp

-启用-mysqlnd-with-mysqli=mysqlnd--具有-pdo-mysql=mysqlnd-启用-套接字

-启用-pcntl-使用-p拼写-有附着物-与-gettext-与-gd-启用-exif

-with-jpeg-dir-with-png-dir--具有-freetype-dir-with-xsl-启用-bc计量

-启用-mbstring-启用-日历-启用-simplexml-启用-json-启用-散列

-启用-会话-启用-xml-启用-wddx-启用-opcache-与-pcre-regex

-with-config-file-path=/etc/phpzts/config --with-config-file-scan-dir=/etc/phpzts/config

-启用-cli-启用-调试-启用-fpm-with-fpm-user=www-data-with-fpm-group=www-data

-带-mcrypt-启用-sysvmsg-启用-sysvsem-启用-sysvshm-启用-shmop并行

--enable-maintainer-zts"

  • ./configure $CONFIGURE_STRING

  • make && make install

/etc/phpzts/bin/php --ini)将phpzts/config文件从php-src repo复制到phpzts/config(通过执行/etc/phpzts/bin/php --ini)成功加载该文件)。

所有从php扩展加载的函数在我的脚本中都能很好地工作,特别是mb_string函数、openssl函数、并行函数。,这就是我不明白的,。例如,我希望通过apt-get install php7.4-mbstring安装它们,就像我使用为apache安装的另一个php所做的那样。所有的扩展名都在我刚刚从源代码回购中复制的php.ini文件模板中进行了注释:

代码语言:javascript
复制
;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
...

尽管所有的内容都有注释,但看起来所有这些librairies都是由php加载的,因为我在输入/etc/phpzts/bin/php -m时找到了它们的行,我可以使用它们。如何在php.ini文件中注释它们时加载它们?

此外,当我取消注释extension=openssl时,php说“无法加载动态librairy”。extension_dir文件夹只包含一个名为opcache.so的文件和另一个opcache.a。

当扩展文件夹中没有任何内容时,php如何实际加载所有这些扩展?为什么加载openssl (我可以使用其中的函数),但是当我在php.ini中取消注释php.ini行时,php仍然说“无法加载动态librairy”?当我想为apache版本的php安装php扩展时,为什么要运行apt-get install php7.4-mbstring,而看起来所有的扩展都是预先安装的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-05 19:49:55

您已经将模块静态编译为php二进制文件。看这里,http://www.phpinternalsbook.com/php5/build_system/building_extensions.html

正如您从上一节中已经知道的那样,

扩展可以静态地构建到PHP二进制文件中,也可以编译成共享对象(.so)。静态链接是大多数绑定扩展的默认设置,而共享对象可以通过显式传递--启用-EXTNAME= shared或-with=shared到./

来创建。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63272157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档