PHP 扩展 - 开启扩展[如: PHP 8.0 开启PDO, bcmath] - Windows/docker - 学习/实践

落日映苍穹つ 2023-01-07 10:30 294阅读 0赞

1.应用场景







主要用于开启, 以及安装PHP自带扩展模块.

2.学习/操作







1.文档阅读

https://www.php.net/manual/zh/pdo.drivers.php // PDO 驱动

https://www.runoob.com/php/php-pdo.html  // PHP PDO

https://www.php.cn/php-weizijiaocheng-390946.html // PDO 原生封装操作 —- 20210610 周四 家里

语言:



PHP 8.0


环境:



Windows系统本地


Docker容器


2.整理输出








2.1 Windows系统本地

默认情况下, PHP 8.0 是没有启动任何自带扩展的

php.ini  // 复制php.ini.development而来

测试使用PDO扩展连接数据库, mysql 8.0

访问如下: 

http://localhost:8889/testMysql.php

报错原因很清楚, 没有找到驱动, 也就是PDO扩展没有开启

解决办法:

开启pdo-mysql扩展

打开php.ini文件

找到扩展配置, pdo-mysql, 解开注释, 因为这里只是用到pdo连接MySQL, 所以暂时没必要开启其他扩展.

Note:

因为是第一次, 开启扩展, 所以, 要将扩展目录也要解开注释, 下图可以看到有详细的提示 []

选择Windows的选项, 解开注释:

即, 所有的PHP自带扩展动态链接库, 都存放在, 同级目录的ext目录下

重启服务器

这里使用PHP自带的服务器, 只要ctrl+c停止, 重新执行脚本即可

浏览器中查看phpinfo信息

可以看到pdomysql正常开启

最后, 重新运行之前测试使用pdo连接MySQL的测试

http://localhost:8889/testMysql.php

正常连接mysql  [这里的MySQL是docker中容器MySQL服务器]

补充:

在查看php 8的信息时, 可看到, PHP 8.0的mysqlnd扩展, 支持的密码验证插件有:

mysqlnd,debug_trace,

auth_plugin_mysql_native_password,

auth_plugin_mysql_clear_password,

auth_plugin_caching_sha2_password,   // PHP 7.4 是不支持的~

auth_plugin_sha256_password

2.2 Docker容器

1. docker中安装PHP参见:https://blog.csdn.net/william_n/article/details/111312171 //  PHP 8.0 - window 10下[含Docker方式]安装 - 学习/实践

<a href=”https://hub.docker.com//php?tab=description&page=1&ordering=lastupdated” rel=”nofollow”>https://hub.docker.com//php?tab=description&page=1&ordering=last_updated // PHP 各版本镜像

2. 执行命令查看开启的扩展

php -v

php -m

可以看到一些信息, 安装之后,未做任何配置,默认开启的扩展都是PHP Modules的扩展,而Zend Modules没有扩展开启。

需求



现在做个abstract test 测试生成器的性能如何


代码参见TBD


其中有使用到bcsub函数, 也就是BC扩展https://www.php.net/manual/zh/book.bc.php


默认是没有开启的,这里以Docker中开启BC扩展为例


3. 找到php.ini配置文件



whereis php


一般在/usr/local/etc/php目录下

进入该目录

4. 拷贝并修改配置文件



cp php.ini-development php.ini


输入命令:



vim php.ini


安装vim方法: https://blog.csdn.net/william_n/article/details/116301117  // 修改docker容器中的文件

编辑开启扩展

但是发现, bcmath在docker中开启的方式不是这样的,

docker做了另外的处理,网上其博客,如下执行步骤

于是,进入到

/usr/local/bin目录下 ,并且大致查看了目录下内容, 多数为shell脚本,【应是docker做了外层处理】

docker-php-ext-install shell脚本中,进入到  cd /usr/src/php/ext PHP源代码扩展目录下, 大致意思应该就是查找要安装的扩展然后安装~

https://github.com/docker-library/php/blob/1bc63c1ce4294a4ecb50c60dcf6a57d6749cba7d/8.0/alpine3.13/cli/docker-php-ext-install // docker-library 直接查看相关文件内容

输入 docker-php-ext-install -h 再次查看该命令用法【下面输入中,第一个扩展就是bcmath, 因为顺序按照英文字母顺序输出】,其实上面的shell脚本内容中已经有说明,

结合自身需求,输入命令如下:



docker-php-ext-install bcmath


上面有一些信息值得关注,接下来执行输出的提示



make test


同时可以看到新增的配置文件

/usr/local/etc/php/conf.d 目录下

5. 重启容器



docker restart 容器ID/容器名


或者直接通过desktop App点击重启按钮操作均可

6. 进入容器, 并查看扩展是否开启



docker exec -it 容器ID bin/bash




php -m


可以看到一切开启扩展~~ Over

然后继续任务测试~

后连续执行单独运分别行三次



with-gen


root@512cde94c29c:/var/www/html/learning_of_php8.0/generator/abstract-test# php -f ./with-gen.php


time: 0.3218


memory (byte): 16781312


root@512cde94c29c:/var/www/html/learning_of_php8.0/generator/abstract-test# php -f ./with-gen.php


time: 0.3188


memory (byte): 16781312


root@512cde94c29c:/var/www/html/learning_of_php8.0/generator/abstract-test# php -f ./with-gen.php


time: 0.3157


memory (byte): 16781312



not-gen


root@512cde94c29c:/var/www/html/learning_of_php8.0/generator/abstract-test# php -f ./not-gen.php


time: 0.3298


memory (byte): 52436992


root@512cde94c29c:/var/www/html/learning_of_php8.0/generator/abstract-test# php -f ./not-gen.php


time: 0.3236


memory (byte): 52436992


root@512cde94c29c:/var/www/html/learning_of_php8.0/generator/abstract-test# php -f ./not-gen.php


time: 0.3241


memory (byte): 52436992


root@512cde94c29c:/var/www/html/learning_of_php8.0/generator/abstract-test# 



测试结果:【AVG】


——————————————————————
                |  time    | memory, mb |
——————————————————————
| not gen  | 0.3258 | 50.01           |
——————————————————————
| with gen | 0.3188 | 16.00           |
——————————————————————


顺便可以看到


PHP 8 下面将生成器的占用内存更加少,不过相比在 >=5.5, 7.x


PHP 8 做了非生成器下优化,内存从146.75降到50.01 MB, 生成器下内存没有变化~



测试正常运行~

后续补充

3.问题/补充







1.PHP扩展的知识扩展 —— 稍后学习整理~~~

https://blog.csdn.net/william_n/article/details/104987058  // PHP 扩展 - 学习/实践 

4.参考







https://www.php.net/manual/zh/pdo.drivers.php // PDO 驱动

https://www.runoob.com/php/php-pdo.html  // PHP PDO

后续补充

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dpbGxpYW1fbg_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,294人围观)

还没有评论,来说两句吧...

相关阅读

    相关 php扩展PDO

    【PDO是啥】 PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php\_mysql.d

    相关 bcmath 扩展

    简介 bcmath 扩展提供了一套bc(Binary Calculator)数学函数,它是一个高精度运算的函数库,可以准确地对任意精度的数字进行运算。 对于十进制的浮点