本科毕设:Web C++编译器实时输入问题的PHP实现问询
解决方案方向提示
关于proc_open的可行性
proc_open完全可以解决你的实时输入问题。它和exec的核心区别在于,能为子进程单独创建**标准输入(stdin)、标准输出(stdout)、标准错误(stderr)**的管道连接,PHP可以实时读写这些管道:
- 编译C++程序后,用
proc_open启动运行程序的进程,配置好三个管道的句柄 - 后端持续监听stdout/stderr的输出,一旦检测到程序处于等待输入的状态,就通过通信机制告知前端
- 前端收集用户输入后传给后端,后端将输入写入子进程的stdin管道,程序就能继续执行并返回后续输出
其他可行实现思路
- WebSocket双向通信:替代传统AJAX轮询,建立前端和后端的长连接。后端通过
proc_open处理进程IO,有输出实时推送给前端;前端收到输入请求时,即时把用户输入发送给后端写入stdin,实现真正的交互式体验。 - 容器化运行环境:用Docker或类似容器工具隔离用户代码的运行环境,既提升安全性(防止恶意代码破坏服务器),也能通过容器的IO接口实现实时交互。可以结合
proc_open调用Docker命令,或者直接使用Docker API管理容器的输入输出。 - 前端预输入收集:如果场景允许用户提前输入所有参数,可在前端收集完整输入后,一次性通过
exec或proc_open传给程序,但这仅适用于非实时交互的场景,不符合repl.it的实时输入需求。
内容的提问来源于stack exchange,提问作者EvaldasL
相关产品推荐
相关产品推荐

