信息资讯综合思念体

震惊!php还能这么玩!如何与可交互的程序进行交互


今天有幸看到一篇 shell中交互输入自动化 的文章,对于SDTIN的理解好像是又加深了一层


然后尝试用PHP来实现,果然是可以的,简直棒棒的。

祭出代码:

<?php
/**
 * 与shell程序使用管道进行交互
 */

//定义要开启的管道
$descriptorspec = array(
   0 => array("pipe", "r"),  // 标准输入,子进程从此管道中读取数据
   1 => array("pipe", "w"),  // 标准输出,子进程向此管道中写入数据
   2 => array("file", "./error-output.txt", "a") // 标准错误,写入到一个文件
);

//读入要生成的文件名
if (!isset($argv[1])) {exit('请输入秘钥文件名!');}

$key_name = $argv[1];

//参数
$params =<<<PARAM
CN
Beijing
beijing
Rea .Ltd
technology section
reatang.com
admin@reatang.com



PARAM;

//打开进程
$process = proc_open("openssl req -new -newkey rsa:2048 -nodes -keyout {$key_name}.key -out {$key_name}.csr", $descriptorspec, $pipes, __DIR__);

if (is_resource($process)) {
    
    //与进程进行交互
    fwrite($pipes[0], $params);
    fclose($pipes[0]);
    
    //交互完成
    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);

    $return_value = proc_close($process);

    echo "command returned $return_value\n";
}


这样就自动完成了和命令的交互!OMG简直赞!还是我的基础功夫不扎实呀,之前学习给网站加证书的时候就在想如何能自动生成CSR文件,现在OK了!!


blob.png

  • 评论列表:
  •  礼亚酱
     发布于 2018-01-08 17:58:07  回复该评论
  • 其实我又发现了一种新的生成方式:
    https://gist.github.com/reatang/6f8c336e87639a68ce35b00b746649e1
  •  花楹
     发布于 2017-06-27 10:15:51  回复该评论
  • 这应该是进程的标准输入/输出交互,并不是管道交互……管道需要另开IO……
  •  花楹
     发布于 2017-06-27 10:11:10  回复该评论
  • 我的理解(未必是对的):分层、模块、组件属于不同角度的切分,可以想象一个立方体,在垂直层面上切,这叫(分)层,在水平面上切这叫(模)块,如果竖着拿出一列来,这叫一个组(件);层与层之间的关系叫切面;块与块之间的关系叫调用和依赖;组与组之间的关系叫接口

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.5.1 Zero Theme By 爱墙纸

百度资讯综合思念体对有机生命接触用人形终端界面 那就是
晋ICP备15000230号