php stderr,关于PHP的STDIN/STDOUT/STDERR

php stderr,关于PHP的STDIN/STDOUT/STDERR缘起如果实现 PHP 中标准输入 标准输出 标准错误的重定向 分析在 C 中可以通过 dup2 来实现 但是 PHP 无法直接操作文件描述符 只能操作资源 所以这个事情很难做 下面有个想法 不甚好用 首先 可以通过 fclose STDIN fclose STDOUT fclose STDERR 来关闭标准输入 标准输出 标准错误 然后 通过 fopen 依次打开标准输入 标准输出 标准错误 这时候 标

缘起

如果实现PHP中标准输入、标准输出、标准错误的重定向?

分析

在C中可以通过dup2来实现,但是PHP无法直接操作文件描述符,只能操作资源,所以这个事情很难做。

下面有个想法(不甚好用),首先,可以通过fclose(STDIN); fclose(STDOUT); fclose(STDERR); 来关闭标准输入、标准输出、标准错误; 然后,通过fopen依次打开标准输入、标准输出、标准错误,这时候,标准输入、标准输出、标准错误已经指向你使用fopen打开的位置了;或者说,无论在任何时候(可能已经打开过很多其他文件了),关闭标准输入之后,立即再打开一个文件,则该文件将成为标准输入(标准输出和标准错误亦可用此法);因为,linux上(windows未测试),只要关闭一个资源,立即再打开的资源都将重用刚才关闭的那个文件描述符,但是:

STDIN/STDOU/STDERR 这些常量一旦被关闭,将不可用,因为是常量,也不可能被重新使用,当然,必要的时候,可以通过php://stdin  php://stdout  php://stderr 来达到相同目的

其它发现

我们知道,一个常量不能定义为一个数组,如果这么做了,将得到如下错误:

PHP Warning:  Constants may only evaluate to scalar values in 。。。

但是: STDIN STDOUT  STDERR 也是常量,如果使用 is_scalar(STDIN);来测试的话,发现返回false; 而且不仅这三个常量如此,你也可以自己定义一个资源常量, 如: define(‘MY_FP’, $fp);  当然,如果使用is_scalar($fp); 测试的话,也是返回false的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226701.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午10:19
下一篇 2026年3月16日 下午10:19


相关推荐

  • 为什么投屏找不到设备(投屏电视显示无法访问服务器)

    现在液晶电视价格越来越便宜,很少的钱就可以买一台60寸以上的电视,那么使用电脑的朋友一定想要把画面投屏到电视上,用于玩游戏、看电影吧!Win10就有非常好用的投屏功能,很多朋友可能不知道如何操作,这里小编和大家分享下具体步骤:Win10投屏电视步骤如下:(以小米电视为例)1、首先将电脑连接无线WIFI。2、将电视也连接在同一个无线WIFI网络下。3、进入电视应用中,选择“无线显示”功能。(不同的型…

    2022年4月15日
    756
  • OpenClaw + Home Assistant:用AI Agent让智能家居真正“听懂人话”

    OpenClaw + Home Assistant:用AI Agent让智能家居真正“听懂人话”

    2026年3月13日
    3
  • 软件项目管理笔记

    软件项目管理笔记第一章.软件项目管理概述1.实现项目目标的制约因素有:项目范围成本进度计划客户满意度2.项目管理包括:启动过程组计划过程组执行过程组控制过程组收尾过程组3.什么是项目:为了创造一个唯一的产品或者提供一个唯一的服务而进行的临时性的努力,所以说项目具有临时性特性4.过程管理就是对过程进行管理,目的是要让过程能够被共享,复用,并得到持续的改进5.项目与日常运作的区别与共同点:项目日常运作以目标为导项通过效率和有效性的体现通过项目经理及其团队工

    2022年5月4日
    47
  • 微信小程序宠物论坛4

    微信小程序宠物论坛4微信小程序宠物论坛4帖子详情模块界面图JS部分//初始化数据化constdb=wx.cloud.database();constcont=db.collection(‘comment’);const_=db.commandPage({data:{value:”请输入评论…”,id:””,post:[],//帖子信息postid:””,//帖子IDtime:””,//时间content:”

    2022年10月7日
    4
  • UART与USART区别

    UART与USART区别USART:通用同步和异步收发器UART:通用异步收发器当进行异步通信时,这两者是没有区别的。区别在于USART比UART多了同步通信功能。这个同步通信功能可以把USART当做SPI来用,比如用USART来驱动SPI设备。同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下

    2022年5月20日
    53
  • navicat15.0.23 激活码(最新序列号破解)

    navicat15.0.23 激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    463

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号