我想学习php和mySQL,我买了一本书(php和mySQL:丢失的手册(第2版)
我在win8 64位机器上安装了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
这是文件“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";
?>
9条答案
按热度按时间yk9xbfzb1#
只需在文件顶部定义
STDIN
常量,cwxwcias2#
当您尝试使用从PHP文件运行迁移时
似乎时间也会产生这类错误。为了解决这个问题,你可以简单地替换你的代码
如果您在生产环境中,请确保使用--force标志。
mzsu5hc03#
说明
OnlyCLI(命令行)SAPI定义了I/O constants,如
STDIN
、STDOUT
和STDERR
,纯粹是为了在该环境中使用方便。解决方案
正如其他答案中所述,您可以在PHP代码中简单地定义这些常量。您还可以检查
defined()
以避免通过CLI调用时出错。例如:但是,请记住,
php://stdin
可能无法在非CLI SAPI(如Apache或FPM)中以您期望的方式工作。例如,要在通过FPM执行时访问原始POST正文,您可以使用php://input
。更多信息
PHP有many不同的SAPI(服务器应用程序编程接口),允许您在各种环境中执行PHP代码,如Web服务器,电子邮件服务器或命令行(CLI)。例子包括:
每个SAPI可以具有稍微不同的初始条件和行为。其他differences between the CLI SAPI and other SAPIs包括:
header()
没有影响。html_errors
和output_buffering
)具有不同的默认值(更适合CLI)。uyto3xhc4#
试着把这个加到你的文件的顶部
nwnhqdif5#
当此错误来自Youtube Data API code sample时,这是因为示例设计为从CLI运行,而基于浏览器的实现不提供提示用户输入
STDIN
行所需输入的方法。由于auth代码是作为
$authUrl
变量中的一个参数提供的,该变量在脚本第一次运行时打印到屏幕上,因此我能够通过替换$authCode = trim(fgets(STDIN));
其中:
$authCode = $_GET['code'];
vsmadaxz6#
有时您会将ENV更改为生产环境,并尝试在该ENV中进行更新。所以最好把ENV改回本地。更改.env文件。
早期:
APP_ENV=production
解决方案:
APP_ENV=local
wdebmtf27#
对于Laravel开发者在运行Artisan命令
Artisan::call('command');
时遇到此错误,以下是解释和解决方案。问题
当您使用
$this->confirm()
、$this->anticipate()
、$this->choice()
等执行询问问题的命令时,会发生错误。当您在执行代码中的命令时提出问题时,就会出现问题,因为它无法与提示进行交互和响应。解决方案
要解决此问题,可以修改命令以接受直接提供答案的参数或选项,从而绕过用户交互的需要。
例如,当在生产环境中运行
Artisan::call('db:seed')
时,该命令将询问您是否确实希望运行seeder,因为它是在生产环境中运行的。您需要提供“是”或“否”的回答。通过使用--force
选项,将不会询问该问题,播种程序将继续运行。这只是一个例子;您的命令中可能有其他问题,需要实现类似的解决方案。wmvff8tz8#
看起来你正在尝试使用一个名为
STDIN
的常量,它不存在。STDIN用于通过fopen获取当前打开的流。
使用
STDIN
而不使用当前打开的流将无法工作。我也相信
STDIN
只在cli下工作,但我不是100%确定。如果是这种情况,使用与上面相同的代码,但将STDIN
替换为$file
;dxxyhpgq9#
如果你想让你的代码在“STDIN”常量下正确执行,你有两个选择:
或:
其他选项:
不会工作!!您可能需要在代码中定义“STDIN”常量,如上所述。