0

0

如何制做在线编译代码的网站?

php中文网

php中文网

发布时间:2016-06-06 16:43:55

|

1983人浏览过

|

来源于php中文网

原创

就如同一些代码比赛网站一样,直接上传代码就可以在网页上看到运行结果,go语言官方网站也有着类似功能。如何实现?有没有现成的解决方案?

回复内容:

如果需要的是现成的解决方案,这个就不错:

github.com/mattgodbolt/

效果预览:

Compiler Explorer


如果是针对传统使用方法的编程语言实现一个的话涉及的内容很杂,包括:

  • Web服务器+Web服务器与后端程序交互的组件(这个可以用现成的,我用的是nginx+FCGI)
  • 后端程序

后端核心就是一个类似调用系统给的类似execl的API执行一下对应编译工具,用这个API时还得精心处理一下管道,把输出内容导出来显示回网页。

斯摩派(smapie)企业建站程序
斯摩派(smapie)企业建站程序

一个让ASP程序轻松做最少的代码编写量,一般企业所需要的功能都有,参数设置,数据库管理,文件管理,数据初始化,生成HTML页面(这是为了某些客户需要静态页面的需求),页面管理(这里是为了网站中某些单页面需求而开发的,这里你在前台只要用sub_c.article(2) 这个2是这里的id号,也可以是在比如index.asp?id=2 是一样的效果)公告管理,友情链接,信息发布(这里有分类,分类是无限

下载

但是因为这类程序和OJ一样,是网络上的公共服务而且居然还允许用户上传代码编译执行,所以问题主要集中在安全处理上,而且安全问题的处理高度依赖操作系统。

以Linux为例,安全方面包括但不仅包括以下内容:

  1. 依赖环境构建、沙盒
  2. 运行身份,包括GID、UID
  3. 资源限制,包括socket、文件操作、核心转储大小、文件数、子进程数等等
  4. syscall限制
  5. 执行时间限制,包括运行时间和CPU时间
  6. 文件系统压力

Windows下是另一堆问题要解决,比Linux复杂得多(也许是我不太会用Windows)。


我认识一人,自己实现了一个类似Haskell的东西,有和Go Playground差不多的在线运行网页,我问他怎么那么快把那么多东西都搞完了,他说,“整个语言就是用JS实现的,所以有浏览器就能运行,不需要后端”,这也是一种思路。

前两天的课程设计上正好根同学一块儿设计了一个简单的在线比赛平台,而且平时也经常到网站上做比赛,就简单说下它的实现吧。

把代码提交到网站之后,将其保存成代码,在PHP或JSP中有调用系统命令的东西,如PHP中的exec函数。此时你需要一个判题的脚本,对得到的代码进行编译,运行,得到运行信息之后保存到数据库中,如在php中就可以写一个实现的语句:
exec("./onj $destFile $file", $output, $verdict); //from onj project - Processfile.php - line 105
这就是调用判题功能,原则上可以用任何语言写。onj就是用python写的,对代码进行编译,运行和判断。它需要得到一个比赛题目的标准输入,将标准输出重定向到一个文件中,然后对标准答案进行对比,可以得出用户提交的代码是否能得出正确的结果。
这样的系统在网上好多了,推荐几个:
1. ONJ sourceforge.net/project php,代码十分工整,我很喜欢,中文支持不完善。
2.NEUOJ github.com/yangzhe1991/判题是用python写的。
3.HUSTOJ code.google.com/p/husto国内好像用的比较多的,我没用过。

//自己写的太丑了,就不帖出来了。
这种比赛的网站搞ACM的人相对熟悉,如果有认识的人可以问问。 直接以web进程fork的问题是web是轻量级的,并发数大一些很正常。
而编译和运行则比较重量级,不能并发太多,必须控制。
所以应该有个任务队列的机制,先后有序的进行。
至于安全,可以另外开一个话题了。 应该是直接调用编译命令,检查输出结果吧。
至于安全问题,应该可以用一个权限级别很低的用户来做这个事。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

86

2025.12.26

压缩文件加密教程汇总
压缩文件加密教程汇总

本专题整合了压缩文件加密教程,阅读专题下面的文章了解更多详细教程。

50

2025.12.26

wifi无ip分配
wifi无ip分配

本专题整合了wifi无ip分配相关教程,阅读专题下面的文章了解更多详细教程。

100

2025.12.26

漫蛙漫画入口网址
漫蛙漫画入口网址

本专题整合了漫蛙入口网址大全,阅读下面的文章领取更多入口。

293

2025.12.26

b站看视频入口合集
b站看视频入口合集

本专题整合了b站哔哩哔哩相关入口合集,阅读下面的文章查看更多入口。

589

2025.12.26

俄罗斯搜索引擎yandex入口汇总
俄罗斯搜索引擎yandex入口汇总

本专题整合了俄罗斯搜索引擎yandex相关入口合集,阅读下面的文章查看更多入口。

725

2025.12.26

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

63

2025.12.25

错误代码dns_probe_possible
错误代码dns_probe_possible

本专题整合了电脑无法打开网页显示错误代码dns_probe_possible解决方法,阅读专题下面的文章了解更多处理方案。

30

2025.12.25

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

94

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号