必须通过phpinfo()确认“loaded configuration file”路径再修改,否则无效;thinkphp必需设置date.timezone="asia/shanghai"和cgi.fix_pathinfo=1;extension_dir路径需正确且启用必要扩展;修改后须重启web服务器而非仅刷新页面。

php.ini 文件路径必须先确认清楚
很多人改了 php.ini 却没生效,根本原因是改错了文件。Windows 下 PHP 可能从多个位置加载配置:解压目录下的 php.ini、C:Windowsphp.ini,甚至注册表指定路径。最可靠的方法是新建一个 info.php,内容为 <?php phpinfo(); ?>,访问后看 “Loaded Configuration File” 这一行显示的路径——只改这里指向的文件才有效。
date.timezone 和 cgi.fix_pathinfo 是 ThinkPHP 必设项
漏掉这两项,date_default_timezone_get() 报警告、PATH_INFO 路由 404、require() 找不到类都是常态。不是“建议设置”,而是框架启动就依赖:
-
date.timezone = "Asia/Shanghai"—— 分号必须删,值不能空或带空格 -
cgi.fix_pathinfo = 1—— IIS + FastCGI 场景下强制需要,Apache + php-fpm 同样要开 - 这两行如果被注释(前面有
;)或拼写错误(比如写成fix_pathinfo少个cgi.),ThinkPHP 直接拒绝路由解析
extension_dir 和扩展启用容易漏掉分号或路径错位
extension_dir 不只是填对路径,还要确保该路径下真实存在 .dll 文件;而启用扩展时,只删 extension=php_mbstring.dll 前的分号还不够:
-
extension_dir = "D:\php\ext"—— Windows 路径用双反斜杠或正斜杠,单反斜杠会转义出错 - 必须启用的扩展至少包括:
extension=php_mbstring.dll、extension=php_openssl.dll、extension=php_pdo_mysql.dll - IIS 下如果用到文件缓存或共享对象,
extension=php_wincache.dll也得加,否则opcache_get_status()类函数可能返回空
改完必须重启 IIS 或 Apache,且不能只刷新页面
修改 php.ini 后,Web 服务器进程不会自动重载配置。常见误区:
- 以为浏览器 Ctrl+F5 就行 —— 实际上 PHP 解析器进程没重启,旧配置还在内存里
- 只在 IIS 管理器点“重启网站” —— 不够,得“重启整个 IIS 服务”(命令行执行
iisreset)或至少重启对应的应用程序池 - Apache 下改完要运行
httpd -k restart,不是httpd -k start(后者不保证重读配置)
最稳妥验证方式:改完、重启服务、再访问 info.php,逐项核对 “Loaded Configuration File”、“date.timezone”、“cgi.fix_pathinfo”、“Registered PHP Streams” 里有没有你启用的扩展名。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











