# 前言
在开发过程中,有时在修改了php.ini配置文件,但却发现修改没有生效,因此专门去踩一下里面的坑。
# 相关信息
- wamp version 3.0.6 64bit
- 我的wamp安装路径 H:\WebDevelopmentEnvironment\wamp64\
- Windows 10
# php.ini配置文件存储路径
如果你在wamp的安装目录下仔细查找过php的配置文件php.ini的话,你可以在PHP的安装目录与Apache的bin目录下找到它。
Apache的bin目录下
PHP的安装目录下
# 不同模式下php.ini文件的加载
接下我们用两个方式去查看一下php的php.ini配置文件加载情况,一种方式是通过Apache-Web访问,另外一种则是ssh-cli访问,也就是命令行模式下。
- 在你的服务器下创建一个PHP文件,通过phpinfo()函数来查看相关信息,在浏览器访问该文件即可。
- 另外一种访问则在命令行中使用php –ini命令,则可查看到相关信息
为什么会出现这种情况?
首先需要知道php文件有两种运行方式:
CLI,即在命令行中运行,php文件直接由php的解析器解析运行,不经过web服务器(Apache等)
web服务器,当通过浏览器请求web服务器中某个php文件时,web服务器(如Apache)会将PHP作为一个模块加载进来,再交由php的解析器去解析运行所请求的php文件。
到这里,你应该明白为什么会出现不同访问模式下加载的php.ini配置文件不同了吧。
- 在wamp中,通过web访问PHP文件的时,wamp设定了所加载的PHP配置文件是Apache bin目录下的php.ini
在命令行中访问PHP文件时,不用经过web服务器,直接加载配置文件是PHP安装目录下的
在PHP安装目录下还有个phpForApache.ini配置文件,这个配置文件其实等同于Apache bin目录下那个配置文件,只有在通过web访问时才被加载。
# 验证
我们可以通过一个例子来验证一下,例如pdo使用配置文件形式连接数据库
。
## 预先将pdo连接数据库的dsn信息配置在php.ini配置文件中
## 当使用pdo连接数据库的时候直接读取配置
## php.ini配置文件
## 配置格式 pdo.dsn.dsnName="dsnValue" (pdo的dsn值格式请自行了解
pdo.dsn.PdoDsn="mysql:host=localhost;dbname=user"
try {
// 读取方式: 通过dsnName来获取dsnValue
$dsn = 'PdoDsn';
$userName = "root";
$password = "";
$pdoConn = new PDO($dsn,$userName,$password);
var_dump($pdoConn);
}catch(PDOException $e) {
echo $e->getMessage();
}
当设置在PHP目录下的php.ini文件
当设置在PHP目录下的
phpForApache.ini
或者Apache bin目录下的php.ini文件
验证成功!