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

还望不吝赐教。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

直接这样是指定不了的,从 源码 看就知道了 ,他是直接使用 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年前

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