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. 您实际得到的结果?

配置文件未加载
Laravel

还望不吝赐教。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

直接这样是指定不了的,从 源码 看就知道了 ,他是直接使用 php -S 新起的一个。

file

如果你确实想要这样做,也不是不行,通过 手册 可以知道,PHP 会根据环境变量 PHPRC 去读取 php.ini 文件。

artisan server 运行时,可以用 --env 指定一个 env 文件的后缀,所以,你可以把 PHPRC 写在这里面,当然这还不行,因为 源码 中限制了,只有APP_ENVLARAVEL_SAILPHP_CLI_SERVER_WORKERSPHP_IDE_CONFIGSYSTEMROOTXDEBUG_CONFIGXDEBUG_MODEXDEBUG_SESSION、 这几个变量是可以被传递的,其他都会被置为 false

file

在 Laravel 9 中,这几个限制的环境变量 被做成了一个静态属性,可以在外部去修改了,Laravel 8 里面是写死的。

file

不过,不幸中的万幸的是,他这里读取的是 $_ENV 这个变量,这个变量默认是读取的 .env 文件里面的,也就是说可以直接在这个文件里面写 PHPRC 变量,如果这里只是为了这个 server,那就可以直接在任意 ServiceProvider 的 Boot 方法中,加入。

// 仅在非生产环境使用
// 如果你想进一步缩小范围,那还要添加更加严谨的判断
// 比如通过 $_SERVER['argv'] 判断仅 artisan serve 命令时才允许。
if (!$this->app->environment('production')) {
    $_ENV['PHPRC'] = php_ini_loaded_file();
}

使用 php_ini_loaded_file() 获得当前加载 php.ini 前面使用 php -c <php.ini 文件> 就在这里被引用即可,你也可以直接在这里写死一个 php.ini 文件路径。

现在启动的 artisan serve 就可以了……吗?当然不行。。

file

这里可以看到,只有在添加 no-reload 选项或者 env 文件不存在时,才会把 $_ENV 里面的原样返回,所以我们要想办法把这个条件成立,那最简单的就是添加 no-reload 参数,但是这样的话,在你修改 .env 文件时,将不会自动重启。

现在,使用这个命令即可启动。

php -c "D:/php/php-7.4.19-Win32-vc15-x64/php2.ini" .\artisan serve --no-reload
1周前 评论
MuYan (楼主) 1周前
Mutoulee 1周前
讨论数量: 3

直接这样是指定不了的,从 源码 看就知道了 ,他是直接使用 php -S 新起的一个。

file

如果你确实想要这样做,也不是不行,通过 手册 可以知道,PHP 会根据环境变量 PHPRC 去读取 php.ini 文件。

artisan server 运行时,可以用 --env 指定一个 env 文件的后缀,所以,你可以把 PHPRC 写在这里面,当然这还不行,因为 源码 中限制了,只有APP_ENVLARAVEL_SAILPHP_CLI_SERVER_WORKERSPHP_IDE_CONFIGSYSTEMROOTXDEBUG_CONFIGXDEBUG_MODEXDEBUG_SESSION、 这几个变量是可以被传递的,其他都会被置为 false

file

在 Laravel 9 中,这几个限制的环境变量 被做成了一个静态属性,可以在外部去修改了,Laravel 8 里面是写死的。

file

不过,不幸中的万幸的是,他这里读取的是 $_ENV 这个变量,这个变量默认是读取的 .env 文件里面的,也就是说可以直接在这个文件里面写 PHPRC 变量,如果这里只是为了这个 server,那就可以直接在任意 ServiceProvider 的 Boot 方法中,加入。

// 仅在非生产环境使用
// 如果你想进一步缩小范围,那还要添加更加严谨的判断
// 比如通过 $_SERVER['argv'] 判断仅 artisan serve 命令时才允许。
if (!$this->app->environment('production')) {
    $_ENV['PHPRC'] = php_ini_loaded_file();
}

使用 php_ini_loaded_file() 获得当前加载 php.ini 前面使用 php -c <php.ini 文件> 就在这里被引用即可,你也可以直接在这里写死一个 php.ini 文件路径。

现在启动的 artisan serve 就可以了……吗?当然不行。。

file

这里可以看到,只有在添加 no-reload 选项或者 env 文件不存在时,才会把 $_ENV 里面的原样返回,所以我们要想办法把这个条件成立,那最简单的就是添加 no-reload 参数,但是这样的话,在你修改 .env 文件时,将不会自动重启。

现在,使用这个命令即可启动。

php -c "D:/php/php-7.4.19-Win32-vc15-x64/php2.ini" .\artisan serve --no-reload
1周前 评论
MuYan (楼主) 1周前
Mutoulee 1周前

直接这样是指定不了的,从 源码 看就知道了 ,他是直接使用 php -S 新起的一个。

file

如果你确实想要这样做,也不是不行,通过 手册 可以知道,PHP 会根据环境变量 PHPRC 去读取 php.ini 文件。

artisan server 运行时,可以用 --env 指定一个 env 文件的后缀,所以,你可以把 PHPRC 写在这里面,当然这还不行,因为 源码 中限制了,只有APP_ENVLARAVEL_SAILPHP_CLI_SERVER_WORKERSPHP_IDE_CONFIGSYSTEMROOTXDEBUG_CONFIGXDEBUG_MODEXDEBUG_SESSION、 这几个变量是可以被传递的,其他都会被置为 false

file

在 Laravel 9 中,这几个限制的环境变量 被做成了一个静态属性,可以在外部去修改了,Laravel 8 里面是写死的。

file

不过,不幸中的万幸的是,他这里读取的是 $_ENV 这个变量,这个变量默认是读取的 .env 文件里面的,也就是说可以直接在这个文件里面写 PHPRC 变量,如果这里只是为了这个 server,那就可以直接在任意 ServiceProvider 的 Boot 方法中,加入。

// 仅在非生产环境使用
// 如果你想进一步缩小范围,那还要添加更加严谨的判断
// 比如通过 $_SERVER['argv'] 判断仅 artisan serve 命令时才允许。
if (!$this->app->environment('production')) {
    $_ENV['PHPRC'] = php_ini_loaded_file();
}

使用 php_ini_loaded_file() 获得当前加载 php.ini 前面使用 php -c <php.ini 文件> 就在这里被引用即可,你也可以直接在这里写死一个 php.ini 文件路径。

现在启动的 artisan serve 就可以了……吗?当然不行。。

file

这里可以看到,只有在添加 no-reload 选项或者 env 文件不存在时,才会把 $_ENV 里面的原样返回,所以我们要想办法把这个条件成立,那最简单的就是添加 no-reload 参数,但是这样的话,在你修改 .env 文件时,将不会自动重启。

现在,使用这个命令即可启动。

php -c "D:/php/php-7.4.19-Win32-vc15-x64/php2.ini" .\artisan serve --no-reload
1周前 评论
MuYan (楼主) 1周前
Mutoulee 1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!