当前位置: 首页 > 知识库问答 >
问题:

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

仲孙磊
2023-03-14

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

我说的是交互式shell,但在web浏览器中,例如:

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

现在我已经用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 = "4\n5";

    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";
}

任何帮助都将不胜感激

共有1个答案

邢良才
2023-03-14

这将是你的一段旅程,我祝你好运...

通常,您需要有一个打开到浏览器的持久连接。这通常是通过WebSockets实现的,尽管信标甚至WebAssembly(纯套接字)已经开始用于促进这种实时通信。这是一个个人repo-php-sock,它具有使用php打开websocket连接的最低限度。我还尝试了WebSocketD,它类似于WebSocketGUI(也就是websockets的apache或Nginx)。

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

 类似资料:
  • vendor 文件是什么? 任何一个 Composer 程序包想要传递给安装包的用户的命令行脚本都应该被列为 vendor 文件。 如果包包含了包用户不需要的其他脚本(如构建或编译脚本),则代码不应被列为 vendor 文件。 它是如何定义的? 它是通过将 bin 键添加到项目中来定义的 composer.json。它被指定为文件数组,因此可以为任何给定项目添加多个二进制文件。 { "bi

  • 问题内容: 首先,我已经在Google上进行了搜索,但只找到了将压缩文件(例如)嵌入到Shell脚本中的示例。 基本上,如果我有一个打印字符串的C程序(),请说 Hello World! 。 我编译它以获得可执行的二进制文件 现在我有一个shell脚本 我要问的是是否有可能将二进制( hello )嵌入到shell脚本中,以便在我运行时 它执行二进制文件以打印 Hello World! 。 澄清

  • 我已经能够使用pyInstaller从Python 3.4代码成功地生成Windows可执行文件。 但是,每次运行可执行文件(控制台应用程序)时,它都会在代码启动前输出以下内容: 我假设这是pyInstaller引导加载程序过程,如下所述。我想知道是否有一种方法可以抑制这个输出,而不抑制我自己的Python代码生成的输出? 附加信息: 生成单个可执行文件(使用选项) 运行在Windows 7 En

  • 问题内容: 我对linux和shell编写非常陌生。我正在尝试使用以下命令从linux上的安全shell(ssh)运行shellscript: 我收到此错误: 尝试使用此命令: 我犯了同样的错误。 尝试使用此命令: 询问我的密码并给我这个错误:。 1. cat -v path / to / mynewshell.sh的结果是:^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ Rscr

  • 问题内容: 为了从我的Python脚本启动程序,我使用以下方法: 因此,当我启动像这样的过程时我的程序将等待直到该过程完成为止,然后我才能获得程序的完整输出。如果我正在运行需要一段时间才能完成的过程,这将很烦人。 我可以让我的程序通过在循环完成之前轮询过程输出来逐行写过程输出吗? 问题答案: 你可以在命令输出行之后立即使用处理行。这是显示典型用例的完整示例: