为stdin提供价值以供在线判断

时间:2013-11-01 20:42:48

标签: php stdin

我正在做一个在线评判并遇到一些问题

到目前为止我做了什么?

所以我的php代码获取用户代码并将其提供给编译代码的函数Compile(),该函数编译代码并报告编译是否成功。这部分代码运行得很好。

现在剩下的就是运行代码和评估

我的问题

我的问题是如何为用户处理stdin输入。用户通常使用scanf,BufferedReader等从stdin获取输入,这些值通常使用键盘获取。现在假设我已将这些值写入文件中。我将如何为他们提供这些价值。

我的尝试

我正在寻找各种方式,而且我遇到了这个

fopen('php://stdin', 'w') 

如果我认为这个文件就像文件一样,如果多个用户在同一时间使用stdin,则会导致问题。

2 个答案:

答案 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脚本必须具有文件和目录的权限。