PHP:Don';我不理解扩展系统

PHP:Don';我不理解扩展系统,php,Php,我最近需要用PHP进行多线程处理,所以我从源代码处编译了7.4版,以启用ZTS模式(需要使用新的并行扩展): 我在服务器上克隆了PHP源repo git签出PHP-7.4 /buildconf--force 我从一个教程中获取了这个配置字符串,我必须承认我并没有真正理解所有选项: CONFIGURE_STRING=“--prefix=/etc/phpzts--with-bz2--with-zlib--enable-zip--disable-cgi --启用soap——启用intl——使用

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

  • 我在服务器上克隆了PHP源repo

  • git签出PHP-7.4

  • /buildconf--force

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

    CONFIGURE_STRING=“--prefix=/etc/phpzts--with-bz2--with-zlib--enable-zip--disable-cgi
    --启用soap——启用intl——使用openssl——使用readline——使用curl——启用ftp
    --启用mysqlnd--使用mysqli=mysqlnd--使用pdo mysql=mysqlnd--启用套接字
    --启用pcntl——使用pspell——使用enchant——使用gettext——使用gd——启用exif
    --使用jpeg-dir——使用png-dir——使用freetype-dir——使用xsl——启用bcmath
    --enable mbstring--enable calendar--enable simplexml--enable json--enable hash
    --启用会话--启用xml--启用wddx--启用opcache--使用pcre regex
    --配置文件路径为/etc/phpzts/config——配置文件扫描目录为/etc/phpzts/config
    --启用cli--启用调试--启用fpm--使用fpm user=www data--使用fpm group=www data
    --使用mcrypt--enable sysvmsg--enable sysvsem--enable sysvshm--enable shmop--enable parallel
    --启用维护者zts“

  • /configure$configure\u字符串

  • make&&make-install

  • 将php.ini文件从php src repo复制到phpzts/config(通过执行
    /etc/phpzts/bin/php--ini
    确认它已成功加载)

应该从php扩展加载的所有函数在我的脚本中都运行良好,特别是mb_字符串函数、openssl函数和并行函数这就是我不明白的地方。例如,我希望通过apt get install php7.4-mbstring安装它们,就像我对为apache安装的其他php所做的一样。我刚从源repo复制的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会说“无法加载动态库”。扩展名_dir文件夹只包含一个名为opcache.so的文件和另一个opcache.a


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

您已经将模块静态编译为php二进制文件。看这里

正如您在上一节中已经知道的,PHP扩展可以静态构建到PHP二进制文件中,也可以编译到共享对象(.so)中。静态链接是大多数绑定扩展的默认链接,而共享对象可以通过显式地将--enable EXTNAME=shared或--with EXTNAME=shared传递给./configure来创建


谢谢,这个链接对理解很有帮助,我不知道有两种加载扩展的方法。我猜当您安装php7.4-mbstring时,它会将一个.so库带到“default”(where?)扩展目录中,并在php.ini文件中启用它,对吗?是的,位置取决于debian上的linux发行版,它在/usr/lib/php上的某个位置