php artisan serve运行时,指定了php.ini文件但是提示未加载
1. 运行环境
1). 当前使用的 Laravel 版本?
Laravel Framework 8.83.14
2). 当前使用的 php/php-fpm 版本?
PHP 版本:7.4.32
php-fpm 版本:7.4.32
3). 当前系统
Windows 11
4). 业务环境
开发环境,未使用负载均衡
5). 相关软件版本
无
2. 问题描述?
通过php artisan serve运行laravel内置服务,通过-c参数指定php.ini配置文件的位置,但是启动后服务器,显示ini文件未加载
D:\SoftWares\php74\php.exe -c D:\SoftWares\config\php74\php.ini D:\Projects\laravel_demo\artisan serve --port=8082
3. 您期望得到的结果?
启动后可以正确加载php.ini文件
4. 您实际得到的结果?
配置文件未加载




关于 LearnKu
直接这样是指定不了的,从 源码 看就知道了 ,他是直接使用
php -S新起的一个。如果你确实想要这样做,也不是不行,通过 手册 可以知道,PHP 会根据环境变量
PHPRC去读取php.ini文件。在
artisan server运行时,可以用--env指定一个 env 文件的后缀,所以,你可以把PHPRC写在这里面,当然这还不行,因为 源码 中限制了,只有APP_ENV、LARAVEL_SAIL、PHP_CLI_SERVER_WORKERS、PHP_IDE_CONFIG、SYSTEMROOT、XDEBUG_CONFIG、XDEBUG_MODE、XDEBUG_SESSION、 这几个变量是可以被传递的,其他都会被置为false。在 Laravel 9 中,这几个限制的环境变量 被做成了一个静态属性,可以在外部去修改了,Laravel 8 里面是写死的。
不过,不幸中的万幸的是,他这里读取的是
$_ENV这个变量,这个变量默认是读取的.env文件里面的,也就是说可以直接在这个文件里面写PHPRC变量,如果这里只是为了这个 server,那就可以直接在任意ServiceProvider的 Boot 方法中,加入。使用
php_ini_loaded_file()获得当前加载php.ini前面使用php -c <php.ini 文件>就在这里被引用即可,你也可以直接在这里写死一个 php.ini 文件路径。现在启动的
artisan serve就可以了……吗?当然不行。。这里可以看到,只有在添加
no-reload选项或者env文件不存在时,才会把$_ENV里面的原样返回,所以我们要想办法把这个条件成立,那最简单的就是添加no-reload参数,但是这样的话,在你修改 .env 文件时,将不会自动重启。现在,使用这个命令即可启动。