当前位置: 首页 > news >正文

php学习(第五天)

PHP如何加载扩展(如MySql)?

一.PHP怎么和MySql跨部门协作?

php本身不具备操作MySQL数据库的能力,需要借助PHP操作MySqL的扩展来实现

1. PHP 和 MySQL 的关系

  • PHP 本身:是一门脚本语言,它只能处理自身的逻辑(变量、函数、类、流程控制等)。
  • MySQL 本身:是一个关系型数据库,用来存储和管理数据。
  • 问题:PHP 想要读写 MySQL,就必须通过某种“桥梁”跟数据库通信。

2.扩展(Extension)的橘色

PHP没有内置数据库引擎,需要通过扩展来实现和数据库的交互

PHP所有扩展都在ext(extension)文件夹中(mac环境)

注意:

Windows 环境注意事项:
;
; - 许多 DLL 文件位于 ext/
; 扩展文件夹中,以及单独的 PECL DLL 下载中。
; 请确保正确设置 extension_dir 指令。
2.1 早期扩展
  • mysql 扩展(PHP 5.x 以前常用)
  • 已废弃,不再推荐使用。
2.2 现代扩展
  • MySQLi(MySQL Improved Extension)
    • 提供面向对象和过程化两种写法。
    • 支持预处理语句(防止 SQL 注入)。
  • PDO(PHP Data Objects)
    • 是一个数据库抽象层,不仅支持 MySQL,还支持 SQLite、PostgreSQL、Oracle 等多种数据库。
    • 更灵活,推荐新项目使用

3. PHP → MySQL 的通信过程(抽象层)

可以理解成一个“三层通信”:

  1. PHP 代码层
    • 你写的 <?php ... ?> 脚本。
  2. PHP 扩展层
    • mysqlipdo_mysql 扩展,把 PHP 语句翻译成数据库驱动可识别的指令。
  3. MySQL Server 层
    • 负责执行 SQL(SELECTINSERTUPDATE 等)并返回结果。

流程如下

PHP 脚本 ↓
MySQL 扩展(mysqli / PDO)↓
MySQL 客户端协议↓
MySQL 服务器↓
返回结果

4.php加载扩展这个扩展放在哪个文件里?

4.1. PHP 扩展的本质
  • 扩展 = 一段 C 语言编写的动态库(.so / .dll 文件)
  • 作用:让 PHP 拥有额外的功能,比如:
    • 操作 MySQL (pdo_mysql, mysqli)
    • 操作图片 (gd)
    • 缓存 (opcache)
  • 所以 PHP 本体只是一个“核心”,扩展是“插件”。
4.2 扩展文件放在哪?

查看php配置

php --ini
#返回值如下
Configuration File (php.ini) Path: /opt/homebrew/etc/php/8.4 #配置文件
Loaded Configuration File:         /opt/homebrew/etc/php/8.4/php.ini #已经加载的配置文件 (主配置文件)
Scan for additional .ini files in: /opt/homebrew/etc/php/8.4/conf.d # 扫描其他.ini文件 (额外配置文件目录)
Additional .ini files parsed:      /opt/homebrew/etc/php/8.4/conf.d/ext-opcache # 解析.ini文件

查看有没有自带MySql的扩展

php -m | grep mysql
#返回值如下
mysqli #用来连接 MySQL,支持面向对象和过程式 
mysqlnd #MySQL Native Driver,PHP 内置的驱动层,给 mysqli 和 pdo_mysql 提供底层支持
pdo_mysql #PDO 的 MySQL 驱动,可以用统一的 PDO API 操作数据库。
4.2.1. mysqlnd
  • 全称:MySQL Native Driver
  • 作用:这是 PHP 自带的 MySQL 原生驱动,负责底层和 MySQL 服务器通信。
  • 为什么叫 mysqlnd
    • mysql → 说明它服务于 MySQL
    • nd → Native Driver,本地原生驱动
  • 特点
    • 不依赖外部库(例如 libmysqlclient)
    • 支持 mysqliPDO MySQL 两种 API
4.2.2. mysqli
  • 全称:MySQL Improved
  • 作用:PHP 面向 MySQL 的增强接口,比早期的 mysql 扩展功能更多、更安全
  • 为什么叫 mysqli
    • mysql → 说明它是 MySQL 的接口
    • i → improved(改进的),增强功能
  • 特点
    • 支持面向对象和过程式编程
    • 支持预处理语句(prepared statements)
    • 高性能
4.2.3. pdo_mysql
  • 全称:PHP Data Objects MySQL 驱动
  • 作用:通过 PDO 接口操作 MySQL
  • 为什么叫 pdo_mysql
    • pdo → PHP Data Objects,PHP 的统一数据库接口
    • _mysql → 这个 PDO 实现是针对 MySQL 的
  • 特点
    • 用同一套 API 访问不同数据库(MySQL、SQLite、PostgreSQL…)
    • 支持面向对象,支持预处理语句
    • 便于跨数据库迁移

3. PHP 如何加载扩展

PHP 不会自动扫描文件夹,而是 根据配置文件 php.ini 去加载。

php.ini 里加一行:

extension=mysqli
extension=pdo_mysql

php.ini 扩展部分配置代码如下图:

请添加图片描述

4.如何检查PHP环境

<?php
//检查php环境函数phpinfo()
?>

打开挂载当前index.php的apache服务 (上一篇有讲不再赘述)

打开配置好的网页 http://localhost/index.php

php环境如下图:

4.1 可看到版本号,配置文件路径

请添加图片描述

4.2 Apache 环境

请添加图片描述

4.3 扩展相关

请添加图片描述

4.4 php如何设定时区

[Date]
; Defines the default timezone used by the date functions
; https://php.net/date.timezone
;date.timezone =; https://php.net/date.default-latitude
;date.default_latitude = 31.7667; https://php.net/date.default-longitude
;date.default_longitude = 35.2333; https://php.net/date.sunrise-zenith
;date.sunrise_zenith = 90.833333; https://php.net/date.sunset-zenith
;date.sunset_zenith = 90.833333

1.date.timezone

; Defines the default timezone used by the date functions
; https://php.net/date.timezone
;date.timezone =
  • 作用:指定 PHP 默认时区。
  • 默认行为:如果不设置,PHP 会根据系统时区,但在 CLI 或 Web 下可能报 “Warning: date(): It is not safe to rely on the system’s timezone”
  • 示例
date.timezone = "Asia/Bangkok"

2.** date.default_latitude**

; https://php.net/date.default-latitude
;date.default_latitude = 31.7667
  • 作用:默认的地理纬度,用于日出日落等函数计算(date_sunrise()date_sunset())。
  • 单位:度(°)
  • 示例:31.7667 大约是耶路撒冷纬度。

3.** date.default_longitude**

; https://php.net/date.default-longitude
;date.default_longitude = 35.2333
  • 作用:默认的地理经度,用于日出日落计算。
  • 单位:度(°)
  • 示例:35.2333 大约是耶路撒冷经度。

4.date.sunrise_zenith

; https://php.net/date.sunrise-zenith
;date.sunrise_zenith = 90.833333
  • 作用:计算日出时的太阳高度角基准值(zenith)。
  • 单位:度(°)
  • 默认值:90.833333°,标准天文定义的日出日落角度(考虑大气折射)。

** date.sunset_zenith**

; https://php.net/date.sunset-zenith
;date.sunset_zenith = 90.83333
  • 作用:计算日落时的太阳高度角基准值,与 sunrise_zenith 类似。
4.4.1 php.ini 配置文件中设置时区(全局)

1.打开 PHP 配置文件(Homebrew PHP M2 默认路径):

/opt/homebrew/etc/php/8.4/php.ini

2.搜索 date.timezone,修改为你想要的时区,例如:

date.timezone = "Asia/Bangkok"

注意:必须是 PHP 官方支持的时区名称,参考 PHP 时区列表

下图是请添加图片描述
:

3.保存后重启 PHP(如果是 FPM 或 Apache 模块):

brew services restart php

4.4.2 脚本中设置时区(临时/局部

如果你不想改 php.ini,可以在 PHP 脚本中使用:

<?php
date_default_timezone_set('Asia/Bangkok');// 测试
echo date('Y-m-d H:i:s');
  • 只影响当前运行的脚本
  • 比较适合 CLI 或独立脚本

4.4.3 PHP-FPM / Apache 配置
  • 如果你用 PHP-FPM,php.ini 改完要重启 FPM:
brew services restart php
  • 如果你用 Apache + PHP 模块,改完也要重启 Apache:
brew services restart httpd

4.4.4 验证当前时区
<?php
echo date_default_timezone_get();

或者命令行:

php -r "echo date_default_timezone_get();"

4.5 中国时区PRC

date.timezone = PRC 在 PHP 里表示 将默认时区设置为“中华人民共和国标准时间”,也就是 北京时间(UTC+8)

  1. PRC
    • PRC = People’s Republic of China(中华人民共和国)

    • PHP 内部支持的时区别名之一,等价于 Asia/Shanghai

    • 所以:

      date.timezone = PRC
      

      等同于:

      date.timezone = "Asia/Shanghai"
      
  2. 用途
    • 设置后,所有 PHP 日期函数(date()time()strtotime() 等)会按这个时区来计算时间。

    • 例如:

      echo date("Y-m-d H:i:s");
      

      输出就是北京时间。

  3. 注意事项

    • PRC 是官方支持的 PHP 时区别名,但在跨平台或新项目中,推荐使用完整时区名(如 Asia/Shanghai),可避免潜在兼容性问题。
    • 可以通过 php -i | grep "timezone" 查看当前 PHP 时区。

4.6 其他别名时区在哪看?

PHP 官方列出了所有 时区别名对应的标准时区

  • 别名文档链接:https://www.php.net/manual/en/timezones.others.php

例如:

别名标准时区国家/地区
PRCAsia/Shanghai中国
METEurope/Paris法国及中欧部分国家
EETEurope/Bucharest罗马尼亚及东欧部分国家
ASTAmerica/Puerto_Rico波多黎各、部分加勒比地区

注意:有些别名是历史遗留的,不推荐在新项目中使用,最好用标准时区名(Area/City 格式)。

说明:

  • MET = Middle European Time(中欧时间),覆盖法国、德国、意大利等中欧国家。
  • EET = Eastern European Time(东欧时间),覆盖罗马尼亚、希腊、保加利亚等东欧国家。
  • AST = Atlantic Standard Time / Arabia Standard Time,不同地区定义不同,这里 PHP 默认指美洲的波多黎各。

文章转载自:

http://SgK3vJGa.fktLr.cn
http://oKJSaHps.fktLr.cn
http://nJG6GZ0e.fktLr.cn
http://9SQWjWAK.fktLr.cn
http://19pkro1P.fktLr.cn
http://oPWF0VKQ.fktLr.cn
http://7LMvE5pU.fktLr.cn
http://fq5SY74f.fktLr.cn
http://r7b9aLps.fktLr.cn
http://61ITVpYA.fktLr.cn
http://v9MoJAyU.fktLr.cn
http://t4zqE6sC.fktLr.cn
http://PaDSEBY6.fktLr.cn
http://cZ5kFFIy.fktLr.cn
http://8DH1B4ds.fktLr.cn
http://siQzEojJ.fktLr.cn
http://rRJ240Ii.fktLr.cn
http://Ei9rxR6U.fktLr.cn
http://NpjWaNm1.fktLr.cn
http://EUzWq7Ka.fktLr.cn
http://ZP8vTyQ1.fktLr.cn
http://OJtiuZIP.fktLr.cn
http://EhcUZ7GP.fktLr.cn
http://FSsHmFl9.fktLr.cn
http://iNAzlaqR.fktLr.cn
http://Eufg7cb8.fktLr.cn
http://5I9dFNpp.fktLr.cn
http://J0FCJgUF.fktLr.cn
http://9G00lGU1.fktLr.cn
http://csh00aOZ.fktLr.cn
http://www.dtcms.com/a/382130.html

相关文章:

  • C盘清理技巧分享的技术文章大纲
  • PINN物理信息神经网络驱动的三维声波波动方程求解MATLAB代码
  • 深度学习优化器进化史:从SGD到AdamW的原理与选择
  • 计算机视觉(opencv)实战十九——角点检测图像特征(Harris 角点、Shi-Tomasi 角点)
  • 【限流器设计】固定窗口计数法
  • Estimator and Confidence interval
  • 构建AI智能体:三十二、LangChain智能体:打造会使用工具(Tools)、有记忆(Memory)的AI助手
  • AI内容标识新规实施后,大厂AI用户协议有何变化?(六)科大讯飞
  • 机械应答到自然交流,声网AI陪练改变我的口语
  • 贪心算法应用:信用评分分箱问题详解
  • 【Spring AI】Filter 简单使用
  • html各种常用标签
  • Linux 进程信号之信号的捕捉
  • 实验-高级acl(简单)
  • C++之特殊类设计
  • stm32教程:USART串口通信
  • 地级市绿色创新、碳排放与环境规制数据
  • ES——(二)基本语法
  • 中级统计师-统计法规-第十一章 统计法律责任
  • 拥抱直觉与创造力:走进VibeCoding的新世界
  • Python进程和线程——多进程
  • 论文阅读 2025-9-13 论文阅读随心记
  • leecode56 合并区间
  • 用R获取 芯片探针与基因的对应关关系 bioconductor的包的 三者对应关系
  • xxl-job的使用
  • 2025 年 9 月 12 日科技前沿动态全览
  • 高德地图自定义 Marker:点击 悬停 显示信息框InfoWindow实战(Vue + AMap 2.0)
  • 猿辅导Java后台开发面试题及参考答案
  • 启动项目提示:org.springframework.context.annotation不存在问题
  • 从零开始的指针(3)