我正在开发一个在线编码竞赛应用程序。在此我希望提交的代码被编译和执行。如果提交的代码是Java,我可以使用exec
(javac文件名)编译它。
但是我应该如何运行该代码,以便从文件中获取输入并将输出重定向到另一个文件?检查各种测试用例代码的任何其他方法也很有用。
exec('java ./$path > ./$dest')
这是我用来执行的,但它无法正常工作。
答案 0 :(得分:0)
你已经搞乱了字符串插值,所以你应该使用:
$path = "path/to/java/file.java";
$dest = "path/to/output.o";
exec("java ./{$path} > ./{$dest}")
但它缺乏一些基本的安全考虑因素。
除非您希望足够聪明的用户在您的计算机上执行他喜欢的任何代码,否则请记住:
exec很危险。考虑执行rm -rf ~
的java文件中的系统调用。我敢打赌,stuff like this有一些java或php替代品,可以在一个或多或少安全的环境中执行它。
另外,如果我通过$dest = '../../some/evil/path/file.o'
,那么该文件将位于您不希望它的目录中(但我认为它设置这些路径并不是那么重要)。