如何在php中使用STDOUT

Mal*_*loc 36 php command-line

我正在运行一个从txt文件读取流的项目,因此在CLI中,我写道:

cat texte.txt|php index.php
Run Code Online (Sandbox Code Playgroud)

在我的index.php文件中,我读了流:

$handle = fopen ("php://stdin","r");
Run Code Online (Sandbox Code Playgroud)

现在我有一个$result包含我的处理文件的结果,我想输出它STDOUT,我看了手册,但我不知道如何使用它,你能不能请我使用一个例子.

mar*_*rio 55

好的,让我再举一个例子来说明STDINSTDOUT使用方法.

在PHP中,您使用这两个习语:

 $input = fgets(STDIN);

 fwrite(STDOUT, $output);
Run Code Online (Sandbox Code Playgroud)

从命令行开始,您可以使用它们:

 cat "input.txt"  |  php script.php   >  "output.txt"

 php script.php  < input.txt  > output.txt

 echo "input..."  |  php script.php   |  sort  |  tee  output.txt
Run Code Online (Sandbox Code Playgroud)

这就是所有这些事情.管道输入或管道输送.并且输入的部分将出现STDIN,而您的输出应该出现STDOUT.人们永远不要穿过小溪!

  • 不正常。您只使用 echo/print/STDOUT 将输出发送到网络服务器+客户端。通过 STDERR 发送的所有内容最终都会出现在 webservers error.log(如果已配置)中。 (2认同)

Gor*_*don 21

常量STDINSTDOUT已经是资源,所以你需要做的就是

fwrite(STDOUT, 'foo');
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/wrappers.php

php:// stdin,php:// stdout和php:// stderr允许直接访问PHP进程的相应输入或输出流.流引用了重复的文件描述符,因此如果打开php:// stdin并稍后关闭它,则只关闭描述符的副本 - STDIN引用的实际流不受影响.请注意,在PHP 5.2.1之前,PHP在这方面表现出错误的行为.建议您只使用常量STDIN,STDOUT和STDERR,而不是使用这些包装器手动打开流.

  • `PHP警告:fwrite()期望参数1是资源,字符串在PHP 5.4中给出,而`$ out = fopen('php:// stdout','w');`工作 (9认同)
  • `fwrite(STDOUT, "foo");` --&gt; `未定义常量 "STDOUT"` (2认同)

小智 18

这对你有用

$out = fopen('php://output', 'w'); //output handler
fputs($out, "your output string.\n"); //writing output operation
fclose($out); //closing handler
Run Code Online (Sandbox Code Playgroud)

  • @Cicada记住,回声是大多数时候的副作用.流是一种依赖.如果您正在编写单元测试,则需要使用流来在测试中模拟/存根它们. (7认同)
  • 它确实*确实起作用,我并不批评它.但是这3个函数调用可以用**一个**语言结构替换.`echo`或`print`. (3认同)
  • 为`php:// output` +1,`php:// stdout`对我不起作用@Cicada我需要使用fputcsv并且STDOUT未定义 (3认同)
  • php://output 是客户端输出,stdout 是 PHP 服务器的标准输出。 (3认同)
  • @Cicada:嗯*矫枉过正*?;) (2认同)