在写守护进程程序的时候需要用到重定向标准输出到指定文件,所以呢?下面的代码可以实现!
$errlog = "/tmp/my.error";
global $STDOUT,$STDERR;
fclose(STDOUT);
fclose(STDERR);
$STDOUT = fopen($errlog, "a");
$STDERR = fopen($errlog, "a");
global $STDOUT,$STDERR;
fclose(STDOUT);
fclose(STDERR);
$STDOUT = fopen($errlog, "a");
$STDERR = fopen($errlog, "a");
是不是很简单?
原理呢?大家都知道标准输出跟标准错误对应php的前三个资源描述符对应的是:
// 这段代码是ide带的提示信息,php源码里面没有
define ('STDIN', "Resource id #1");
define ('STDOUT', "Resource id #2");
define ('STDERR', "Resource id #3");
define ('STDIN', "Resource id #1");
define ('STDOUT', "Resource id #2");
define ('STDERR', "Resource id #3");
当我们释放了旧的STDOUT和STDERR,然后打开的文件的描述符就占了这两个描述符,然后php就把你新打开的两个描述符当成了标准输出的描述符,所以就实现了标准输出重定向的功能。
转载请注明:小Y » php实现重定向标准输出