从源文件通过PHP运行java并保存输出


Running java through PHP from source file and save output

我正在开发一个在线编码竞赛应用程序。在这篇文章中,我希望提交的代码能够被编译和执行。如果提交的代码是Java的,我可以使用exec(javac文件名)进行编译。

但是,我应该如何运行该代码,以便它从一个文件中获取输入并将输出重定向到另一个文件?检查各种测试用例的代码的任何其他方法也将非常有用。

exec('java ./$path > ./$dest')

这是我用来执行的,但它不起作用。

您已经弄乱了字符串插值,所以您应该使用:

$path = "path/to/java/file.java";
$dest = "path/to/output.o";
exec("java ./{$path} > ./{$dest}")

但它缺乏一些基本的安全考虑

除非你想让一个足够聪明的用户在你的机器上执行他喜欢的任何代码,否则请记住:

运行用户提交的java代码肯定需要一些沙盒

而exec是危险的。考虑执行rm -rf ~的java文件中的一个系统调用。我敢打赌,像这样的东西有一些java或php的替代方案,可以在或多或少安全的环境中执行。

此外,如果我传递$dest = '../../some/evil/path/file.o',那么文件将位于您不希望它位于的目录中(但我想这并不重要,因为您设置了这些路径)。