Laravel Artisan使用未定义常量STDIN - 假定为'STDIN'无限循环

11

我正在使用 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

问题在于,这些消息会无限出现,直到我关闭控制台或者长时间后它才会结束该进程。我在谷歌上搜索了这个问题,但只找到stdin的问题,而那些遇到这个问题的人是在php脚本中直接调用artisan,而不是在命令行界面中调用。当我使用“php artisan migrate”时,同样会出现此问题。

所有变更均使用Composer工具进行。 - Josef
我只是想知道是否有您安装的某个包导致了这个问题。您能否分享一下您的 composer show -i 输出? - Simon R
事先尝试运行 composer dump-autoload - Tpojka
https://pastebin.com/fvuvSfNv - Josef
我之前尝试过使用composer dump-autoload,但是没有任何改变。 - Josef
显示剩余5条评论
5个回答

14

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

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

如果您处于生产环境,请确保使用--force标志。


12
我已经找到了这个问题的解决方案:我需要在Laravel目录下的artisan文件中添加以下行。
define('STDIN',fopen("php://stdin","r"));

现在它可以工作了。
仍然有点奇怪,因为通常artisan应该直接可用,无需更改任何内容。

7
为了避免在所有环境中出现问题,您应该使用if(! defined('STDIN')) define('STDIN', fopen("php://stdin","r")); - Nonetallt
我尝试了这个修复方法,但它没有起作用。它仍然显示“使用未定义的常量STDIN”。 - Danish Tahir
1
如果有人想知道在哪里放置这段代码,那么 public/index.php 就是它的位置。仍然不确定为什么它不能直接使用。 - Shreyansh Panchal
没有和我一起工作。 - Mohamed Saleh

7

添加

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

将此代码添加到您的index.php文件中。我尝试将其添加到artisan文件中,但没有成功,但将其放置在index.php中可以解决问题。 我的PHP版本是在Ubuntu 18.04上的v.7.4。

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

0

需要检查的一件事是确保您正在运行与Laravel版本相对应的正确版本的PHP。

php -v将显示PHP版本

我很惊讶地发现,对于我来说,CLI版本的PHP(这是artisan使用的)非常旧。

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

我能够通过使用对应所需PHP版本的命令来运行artisan命令:php7.1 artisan migrate


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接