PHP 是否已安装并找到 php.ini 文件位置:运行 php --ini 查看 CLI 加载路径,Web 环境用 phpinfo() 查 Loaded Configuration File;Windows 常见于 C:\php\php.ini,Linux/macOS 多在 /etc/php//cli/php.ini 或 /etc/php//apache2/php.ini。
php.ini 文件位置很多用户以为下载 ZIP 包解压就算“安装”了,其实 PHP CLI 或 Web 服务(如 Apache/Nginx)能否正常读取配置,取决于它实际加载的是哪个 php.ini。直接改错文件毫无作用。
php --ini 查看 CLI 模式下加载的配置路径(注意输出中的 Loaded Configuration File 行)info.php 文件,内容为 ,用浏览器访问,搜索 Loaded Configuration File
—— 这才是 Apache/Nginx 实际读取的文件C:\php\php.ini 或 C:\Windows\php.ini;Linux/macOS 多在 /etc/php/*/cli/php.ini(CLI)或 /etc/php/*/apache2/php.ini(Apache)等,具体以 php --ini 输出为准extension_dir 和启用扩展前先确认路径有效性启用了 extension=openssl 却报 “unable to load dynamic library”,大概率是 extension_dir 指向错误,或 DLL/so 文件根本不存在。
php -r "echo ini_get('extension_dir');"
\ 或双正斜杠 //,单斜杠 / 可能被忽略(尤其在旧版 PHP)extension_dir 目录存在且 PHP 进程有读权限;扩展名是 .so,不是 .dll
sudo systemctl restart apache2)或 PHP-FPM(sudo systemctl restart php*-fpm),CLI 模式无需重启但需重新执行命令memory_limit、upload_max_filesize 和 post_max_size 的联动关系调大 upload_max_filesize 却仍无法上传大文件?因为 PHP 要求 post_max_size >= upload_max_filesize,且 memory_limit 必须大于二者之一(尤其处理大 POST 数据时)。
upload_max_filesize = 100M post_max_size = 108M memory_limit = 128M
post_max_size 包含所有 POST 数据(文件 + 表单字段),所以要比 upload_max_filesize 略大(一般 +8M 足够)memory_limit 不是越大越好:过大会导致单请求占用过多内存,高并发时可能触发 OOM;建议按业务峰值设,而非无脑设 -1
php -r "echo ini_get('upload_max_filesize'), ' ', ini_get('post_max_size'), ' ', ini_get('memory_limit');"
php.ini 后 Apache 无响应的常见原因不是配置写错了,而是 Apache 加载 PHP 模块失败,日志里通常只显示 “AH00051: child pid XXX exit signal Segmentation fault” 或直接不启动。
php.ini 中 extension_dir 是否指向绝对路径(相对路径在 Apache 下常失效)php7apache2_4.dll(或对应版本)与 PHP 版本严格匹配:PHP 8.2 不能用 PHP 8.1 的模块extension= 行),再逐个启用,定位是哪个扩展引发崩溃error.log 是唯一可靠线索,别只看浏览器 500 错误php.ini,而不是你手头编辑的文件。路径、权限、服务重启、模块兼容性——四者缺一不可。