【问题标题】:PHP proc_open - Bail out if process requires inputPHP proc_open - 如果进程需要输入,则退出
【发布时间】:2023-03-28 20:02:02
【问题描述】:

所以 - 我正在使用 proc_open() 执行诸如 sshrsyncscp 等程序来执行备份任务。

但是,在某些情况下,这些过程可能会变得交互并需要输入,例如当 SSH 的公钥身份验证失败时,它会要求输入密码。这是一个主要问题,因为让备份作业挂起是不可能的,更糟糕​​的是,不会产生错误。

如何完全摆脱正在运行的进程中的交互性?如果该过程突然需要输入,我想立即退出并生成错误。 通用超时不是解决方案,因为备份过程在正常操作中可能需要很长时间。 我真的需要一个通用的解决方案来解决这个问题。

谢谢!

【问题讨论】:

  • 也许创建一个custom stream class 将自己作为零长度流传递,并且还让您知道何时请求读取?不幸的是,PHP 的流情况充斥着特殊情况和不一致之处,因此这可能会变得比听起来更困难(甚至是不可能的)。

标签: php proc-open


【解决方案1】:

只需传递一个空文件作为标准输入:

 $r = proc_open('cat', [fopen('/dev/null', 'rb')], $p);
 proc_close($r)

此脚本在几毫秒后结束。

【讨论】:

    猜你喜欢
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2011-01-13
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多