PHP——通过shell运行可执行二进制文件并打印输出



我有一个可执行的二进制文件,我需要运行它,并在它请求输入时以交互方式从中读取和写入

我说的是交互式shell,但在网络浏览器中,比如:

  • 二进制文件一产生输出,我就想把它发送到浏览器
  • 一旦二进制文件请求用户输入,我希望用户从浏览器中写入输入

现在我已经对proc_open()做了同样的事情,我已经使用管道与正在运行的进程进行了通信,它运行得很好,但在运行二进制之前,我必须传递所有需要的输入

这是我迄今为止写的代码:

<?php
$descriptors = [
0 => ["pipe", "r"],  // stdin is a pipe that the child will read from
1 => ["pipe", "w"],  // stdout is a pipe that the child will write to
2 => ["pipe", "w"]  // stderr is a pipe to write to
];
$process = proc_open('g++ test.cpp -o test.o && ./test.o', $descriptors, $pipes, "/home/ixcoders/Desktop");
if (is_resource($process)) {
$inputs = "4n5";
fwrite($pipes[0], $inputs); // Add inputs to pipe
fclose($pipes[0]);
echo stream_get_contents($pipes[1]); // Print Output
fclose($pipes[1]);
echo stream_get_contents($pipes[2]); // Print Errors
fclose($pipes[2]);
// It is important that you close any pipes before calling
// proc_close in order to avoid a deadlock
$return_value = proc_close($process);
echo "n";
echo "Error Code: " . $return_value . "n";
}

如有任何帮助,将不胜感激

这将是你的旅程,我祝你好运。。。

一般来说,你需要有一个持久的连接打开到浏览器。这通常是通过WebSockets完成的,尽管信标甚至WebAssembly(纯套接字(已经开始用于促进这种实时通信。完全公开这是一个个人repo php sock,它具有使用php打开websocket连接的最低限度。我还试用了WebSocketD,它就像一个websocket Gui(也就是用于websockets的apache或Nginx(。

请注意,您的数据库连接(如果您需要WS中的任何连接(应该在每次请求时重置/关闭。。。就像每次使用它一样,而不仅仅是每个用户的连接。至少在我使用MySQL的经验中,这是最好的方法。

最新更新