Aujourd'hui, je souhaite utiliser PHP pour contester certaines questions de programmation en ligne dans Sphere Online Judge, vous devez utiliser une entrée et une sortie standard, mais j'écris PHP récemment et je ne veux pas utiliser C. Je soumets généralement des formulaires lors de l'écriture de projets, je n'y ai vraiment pas pensé, alors j'ai lu la documentation.
Le document est ici : http://php.net/manual/zh/wrappers.php.php
1 Introduction à PHP STDIN, STDOUT, STDERR :
, STDIN
, STDOUT
les flux d'entrée et de sortie de commande sont utilisés pour entrer et sortir du contenu sur la console (terminal shell Linux, terminal cmd Windows). Ils sont ouverts par défaut et peuvent être lus directement. Opérations d'écriture, elles ne peuvent être utilisées qu'en mode CLI (interface de ligne de commande, interface de ligne de commande) et elles ne sont pas définies en mode HTTP. STDERR
, php://stdin
, php://stdout
ne parviennent pas non plus à afficher le contenu sur le navigateur http. Après le test : le contenu écrit sur php://stderr
sera inscrit dans le journal des erreurs de. le site par défaut, les deux autres n'ont aucun effet. php://stderr
原始流 | 流打开副本 | 描述 |
---|---|---|
STDIN | php://stdin | 标准输入(standard input),只读,用于从控制台输入内容; |
STDOUT | php://stdout | 标准输出(standard output),只写,用于向控制台输出正常信息; |
STDERR | php://stderr | 错误输出(standard error),只写,用于向控制台输出错误信息; |
, php://stdin
et php://stdout
. php://stderr
Tutoriel vidéo PHP]
2. Utilisation de PHP STDIN : "STDIN" en langage PHP est utilisé pour read from La console lit le contenu.Lorsqu'il rencontre cette constante ou ouvre le script via la fonction fopen()
, le script attendra que l'utilisateur saisisse le contenu jusqu'à ce que l'utilisateur appuie sur la touche Entrée pour le soumettre. php://stdin
test : stdin.php
<?php echo "请输入内容:"; $jimmy = fgets(STDIN); echo sprintf("输入的内容为: %s\n", $jimmy); $demo = fopen('php://stdin', 'r'); echo "请输入: "; $test = fread($demo, 12); //最多读取12个字符 echo sprintf("输入为: %s\n", $test); fclose($demo);
请输入内容:sad 输入的内容为: sad 请输入: asdasdasdasdasdasd 输入为: asdasdasdasd(这里因为设置了最多读取12个字符,设置更多一些就可以完整显示)
en langage PHP Utilisé pour afficher les informations standard sur la console ; le contenu écrit sur cette constante ou sur STDOUT
ouvert par la fonction fopen() sera directement envoyé vers la php://stdout
sortie standard de la console; le contenu peut être redirigé vers un endroit spécifié, tel qu'un fichier, en utilisant ">" ou "1>". De même, écrivons un fichier pour tester
<?php fwrite(STDOUT, "通过STDOUT写入;\n"); $demo = fopen("php://stdout", "w"); fwrite($demo, "通过php://stdout写入;"); fclose($demo);
☁ test php demo.php > a.txt ☁ test cat a.txt 通过STDOUT写入; 通过php://stdout写入;% ☁ test php demo.php 通过STDOUT写入; 通过php://stdout写入;% ☁ test
fopen() sera directement affiché dans la sortie d'erreur de la console. ; Le contenu de la sortie d'erreur peut être redirigé vers un endroit spécifié, tel qu'un fichier, en utilisant "2>" ; vous pouvez également utiliser "2>&1" pour diriger la sortie d'erreur. à la sortie standard, fusionnée avec la sortie standard.
Testons-le<?php fwrite(STDERR, "STDERR写入的错误输出;\n"); fwrite(STDOUT, "STDOUT写入的正常输出;\n"); $stdout = fopen("php://stdout", "w"); fwrite($stdout, "php://stdout写入的正常输出;\n"); fclose($stdout); $stderr = fopen("php://stderr", "w"); fwrite($stderr, "php://stderr写入的错误输出;\n"); fclose($stderr);
☁ test php demo.php 1>demo.ok 2>demo.err ☁ test cat demo.ok STDOUT写入的正常输出; php://stdout写入的正常输出; ☁ test cat demo.err STDERR写入的错误输出; php://stderr写入的错误输出;
☁ test php demo.php 1>AllInOne 2>&1 ☁ test cat AllInOne STDERR写入的错误输出; STDOUT写入的正常输出; php://stdout写入的正常输出; php://stderr写入的错误输出;
<?php // your code here $x=0; while($x!=42){ $x = fgets(STDIN); if($x!=42){ echo sprintf("%d\n",$x); } } ?>