gpt4 book ai didi

php - 从 PHP 使用 linux 'dialog' 命令

转载 作者:行者123 更新时间:2023-12-04 20:24:47 26 4
gpt4 key购买 nike

我正在尝试编写一个帮助程序脚本来在服务器上执行只能从命令行完成的各种管理任务,并尝试使用“对话框”命令来显示消息框、输入、密码提示等,但是,这个任务的需要要求我用 PHP 处理数据。

我在让对话框命令以这种方式工作时遇到问题,无法弄清楚我做错了什么。

有一个例子here

不幸的是,它不起作用。

当您对外部应用程序运行 PHP 和 exec/backtick/system 时,IO 似乎没有按您预期的方式工作。

我能得到的最接近的是使用 passthru() 命令:

<?php
$CMD = "dialog --menu \"Please select\" 10 40 3 backup \"Backup Files\" restore \"Restore Files\"";
passthru($CMD);
?>

这是 PHP 让对话框正确使用 STDOUT 的唯一方法,任何其他方法都不会显示,但您可以按回车键选择一个选项。

我试过反引号、exec() 和 system() 但似乎没有任何效果。

我想知道的是如何从 PHP 中正确读取 STDERR 以将返回值放入名为 $result 的变量中。

我敢肯定其他一些系统管理员以前不得不这样做。

我不为此使用 bash 的原因是我必须执行的一个命令作为选择的结果只产生 XML 输出,我无法在 bash 中有效地解析它。

最佳答案

以防万一其他人正在搜索此内容:

function dialog ($args) {
$pipes = array (NULL, NULL, NULL);
// Allow user to interact with dialog
$in = fopen ('php://stdin', 'r');
$out = fopen ('php://stdout', 'w');
// But tell PHP to redirect stderr so we can read it
$p = proc_open ('dialog '.$args, array (
0 => $in,
1 => $out,
2 => array ('pipe', 'w')
), $pipes);
// Wait for and read result
$result = stream_get_contents ($pipes[2]);
// Close all handles
fclose ($pipes[2]);
fclose ($out);
fclose ($in);
proc_close ($p);
// Return result
return $result;
}

它需要对话框(apt-get 安装对话框)和 proc_xxx(PHP 4.3.0、PHP 5)

它有效,至少对我而言。 :)

关于php - 从 PHP 使用 linux 'dialog' 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4711904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com