我正在做一个在线评判并遇到一些问题
到目前为止我做了什么?
所以我的php代码获取用户代码并将其提供给编译代码的函数Compile(),该函数编译代码并报告编译是否成功。这部分代码运行得很好。
现在剩下的就是运行代码和评估
我的问题
我的问题是如何为用户处理stdin输入。用户通常使用scanf,BufferedReader等从stdin获取输入,这些值通常使用键盘获取。现在假设我已将这些值写入文件中。我将如何为他们提供这些价值。
我的尝试
我正在寻找各种方式,而且我遇到了这个
fopen('php://stdin', 'w')
如果我认为这个文件就像文件一样,如果多个用户在同一时间使用stdin,则会导致问题。
答案 0 :(得分:5)
如果你有编译的代码并且知道它的语言,那就更简单了。
你可以使用exec函数来执行代码,你可以使用这样的命令(对于c程序,并进行测试):
$output = array();
exec("./main < sample_input.txt", $output);
如果您现在检查$ output var,它会在数组中为每行输出一个条目。
希望这有帮助。
答案 1 :(得分:2)
确切地说,exec就是你在PHP中所需要的。
但是,只要您不仅需要运行而且还需要进行评估,您应该这样做 构建一些shell脚本来运行,提供,接收输出并检查输出是否正确。 请记住正确地对该脚本进行沙盒处理,因为它是安全威胁。
执行顺便说一句。还提供第三个参数,即返回值。只要您使用自己的返回代码构建自己的shell脚本,它就非常有用。
exec('./ script.sh',$ output,$ exit_code)
请记住,php脚本必须具有文件和目录的权限。