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