laravel artisan 使用未定义常量 STDIN - 假定 'STDIN' 无限循环

laravel artisan use of undefined constant STDIN - assumed 'STDIN' infinite loop

我正在使用 laravel 5.6 并遇到问题,当我在控制台中使用命令 "php artisan vendor:publish" 时,出现以下错误:

[ERROR] Use of undefined constant STDIN - assumed 'STDIN'
Which provider or tag's files would you like to publish?
 [0] Publish files from all providers and tags listed below
 [1] Provider: Intervention\Image\ImageServiceProviderLaravel5

问题是,这些消息似乎无穷无尽,直到我关闭控制台或很长时间后它才终止进程。

我在 google 上查找了这个问题,但只发现了 stdin 的问题,不同的是,遇到这个问题的人并没有在命令行中调用 artisan界面,但直接在 php 脚本中。

使用"php artisan migrate"

时出现同样的问题

我找到了问题的解决方案:

我必须将以下行添加到 artisan 文件(在 laravel 目录中)。

define('STDIN',fopen("php://stdin","r"));

现在可以了。

还是很奇怪,因为通常 artisan 应该可以工作 out-of-the-box,不需要更改任何东西。

要检查的一件事是确保您运行为 Laravel.

版本选择了正确的 PHP 版本

php -v 将显示 php 版本

我很惊讶地发现 PHP 的 CLI 版本(artisan 使用的)真的很旧。

我没有意识到我的共享主机安装了很多不同版本的PHP。

我能够 运行 artisan 命令,方法是使用与我需要使用的 PHP 版本相对应的命令:php7.1 artisan migrate

我在 运行 artisan 命令播种数据库表时遇到了上述问题:Artisan::call('db:seed', [...]) 在生产中。 添加 --force 标志解决了我的问题

Artisan::call('db:seed', [
   '--force' => true
])

如果您正在生产中,请确保使用 --force 标志。

添加

if(! defined('STDIN')) define('STDIN', fopen("php://stdin","r"));

到您的 index.php 文件。我尝试将它添加到 artisan 文件但没有成功,但将它放在 index.php 中就成功了。 我的 PHP 版本是 Ubuntu 18.04

上的 v.7.4

这个问题是由应用环境引起的。 将应用程序环境更改为 local 或在 artisan 命令后添加 --force 参数。