use*_*343 6 php stdin trim fgets
我想学习php和mySQL,我买了一本书(php&mySql:缺少的手册2edition)
我在win8 64bit机器上安装了Wampserver2.4.
服务器配置
Apache版本:2.4.4
PHP版本:5.4.12
在第一课我得到这个错误:(
Notice: Use of undefined constant STDIN - assumed 'STDIN' in C:\wamp\www\study\sayHello.php on line 5
Run Code Online (Sandbox Code Playgroud)
这是文件"sayHello.php"中的php代码
<?php
echo "Hello there. So I hear you're learning to be a PHP programmer!\n";
echo "Why don't you type in your name for me:\n";
$name = trim(fgets(STDIN));
echo "\nThanks, " . $name . ", it's really nice to meet you.\n\n";
?>
Run Code Online (Sandbox Code Playgroud)
Rik*_*esh 24
只需STDIN在文件顶部定义常量,
define('STDIN',fopen("php://stdin","r"));
Run Code Online (Sandbox Code Playgroud)
Ani*_*war 13
当您尝试使用 PHP 文件运行迁移时
Artisan::call('migrate');
Run Code Online (Sandbox Code Playgroud)
看来那个时候也会产生这些类型的错误。为了解决这个问题,您可以简单地将代码替换为
Artisan::call('migrate', ['--force' => true ]);
Run Code Online (Sandbox Code Playgroud)
如果您在生产中,请确保使用 --force 标志。
仅在CLI(命令行)SAPI定义I / O常数如STDIN,STDOUT,和STDERR,纯粹是为了方便起见在该环境中。
正如其他答案中所述,您可以简单地在 PHP 代码中定义这些常量。您还可以defined()在通过 CLI 调用时进行检查以避免错误。例如:
<?php
if (!defined('STDIN')) {
define('STDIN', fopen('php://stdin', 'r'));
}
Run Code Online (Sandbox Code Playgroud)
但是,请记住,php://stdin在非 CLI SAPI(例如 Apache 或 FPM)中,这可能无法按您期望的方式工作。例如,要在通过 FPM 执行时访问原始 POST 正文,您可以php://input改用。
PHP 有许多不同的SAPI(服务器应用程序编程接口),允许您在各种环境中执行 PHP 代码,例如 Web 服务器、电子邮件服务器或命令行 (CLI)。例子包括:
每个 SAPI 的初始条件和行为可能略有不同。CLI SAPI 和其他 SAPI 之间的其他一些差异包括:
header() 没有效果。html_errors和output_buffering具有不同的默认值(更适合 CLI)。