• 摘要
  • 实现思路
    • 简要解释
    • 工具原理
  • 制作
    • mainphp
    • 上传源码
    • ajax
      • 上传源码
      • 获取运行结果
      • 触发时机
  • 演示
    • 首页
    • 点击PHP代码给出提示
    • 常规代码
    • 操作数据库
  • 总结

摘要

不知道大家有没有看到过这样的一个网站。名字是“菜鸟工具”,里面有很多的在线编辑,在线运行的小工具,实用也很方便。(嘻嘻,不是打广告哈,不过确实很实用)。

作为一个PHP菜鸟,如果能有一个好用的,随时随地练习语法的工具该有多好啊。很明显,上面的那个PHP在线工具,基本上已经可以满足正常的需求了。

但是美中不足的是,不支持数据库以及其他高级特性。所以这就显得很尴尬了。不能练习数据库语句,那还学个毛啊。所以还是自己动手吧,写个能支持数据库的在线工具,自己用。

实现思路

对于PHP文件而言,浏览器向服务器发送url请求的时候,解释器就会自动的把文件翻译成了浏览器可以解析的部分了。所以访问url的过程就是获取php解释过的数据的过程。

简要解释

下面简要的做个解释。比方说咱们有这样的一个temp.php文件, 内容如下:

<?phpecho "Hello PHP";

浏览器访问的时候,得到的数据如下:

工具原理

既然上面的temp.php文件可以这样工作,那么试想一下,如果我们事先把想运行的文件放到temp.php文件里面,然后在访问这个temp.php文件,这样岂不是就可以得到我们想要的结果啦。

而事实上,我就是这么干的,结果也证明,顺序得当的话,还是挺不错的。

我的想法就是:

给个按钮,点击按钮的时候首先会把源代码发送到服务器上,接下来调用一个ajax请求,把源代码的运行结果取出来,显示到“控制台”上。

制作

下面将介绍具体的实现流程。

main.php

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>我自己的PHP工具</title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-ico" />
<style>
.container {width: 1356px;height: 640px;position: absolute;background: #CCC;
}.left {width: 50%;height: 100%;background: lightgray;position: relative;float: left;
}.header {width: auto;height: 61px;
}input {width: 180px;height: 60px;position: relative;background: lightgreen;float: right;margin-right: 12px;margin-top: 6px;border-radius: 25px;box-shadow: 1px 1px 1px #6e6e6e;
}.panel {width: 90%;height: 540px;align: center;
}textarea {font-size: 28px;
}.right {width: 50%;height: 100%;background: deepskyblue;position: relative;float: right;
}
</style></head>
<body><div class="container"><div class="left"><div class="header"><label><font size="5">在下面写上您的PHP代码.</font>如: echo "Hello 郭璞";</label><input id="btn_run" type="submit" value="点击运行"></input></div><hr><div class="panel"><textarea id="source" style="width: 645px; height: 540px;"name="source" placeholder="echo 'Hello World!';"></textarea><!-- <textarea type="hidden" id="hidden" hidden></textarea> --></div></div><div class="right"><h2>下面将显示出您的代码的执行结果</h2><hr><div class="panel"><textarea id="result" style="width: 645px; height: 540px;"></textarea></div></div></div><!-- 编写提交脚本,并获取返回结果 --><script src="./js/jquery-2.2.4.min.js"></script><script>// 请求运行结果function getResult() {$.ajax({type : "GET",url : "./temp.php",success : function(data) {document.getElementById("result").value = data;},error : function(err) {document.getElementById("result").value = err;}});}// 将源代码上传到服务器上function uploadSource() {var source = document.getElementById("source").value;$.ajax({type: "POST",url: "./main.php",data: {"source": source },success: function(){console.log("代码上传成功!");},error: function(err){console.log("代码上传失败!");alert(err);}});}// 使用ajax来 获取执行的结果$(document).ready(function() {document.getElementById("result").value = "正在获取运行结果··· ···";$("#btn_run").click(function(){// 先上传代码uploadSource();// 请求代码运行后的结果getResult();});});</script><!-- 编写php脚本,获取提交信息 --><?php$source = $_POST ['source'];$source = "<?php  " . $source;file_put_contents ( "./temp.php", $source );?>
</body>
</html>

上传源码

<!-- 编写php脚本,获取提交信息 --><?php$source = $_POST ['source'];$source = "<?php  " . $source;file_put_contents ( "./temp.php", $source );?>

经过这段代码,就可以将编辑好的源码上传到服务器上指定的temp.php上了,然后准备过程就结束了。

ajax

这里ajax起到了两方面的作用:

  • 一个是上传源代码
  • 一个是获取代码运行结果

上传源码

// 将源代码上传到服务器上function uploadSource() {var source = document.getElementById("source").value;$.ajax({type: "POST",url: "./main.php",data: {"source": source },success: function(){console.log("代码上传成功!");},error: function(err){console.log("代码上传失败!");alert(err);}});}

获取运行结果

// 请求运行结果function getResult() {$.ajax({type : "GET",url : "./temp.php",success : function(data) {document.getElementById("result").value = data;},error : function(err) {document.getElementById("result").value = err;}});}

触发时机

按照需求,只有在点击运行按钮的时候,才会执行上传,下载流程。所以只需要为按钮添加一个点击事件就可以啦。

$(document).ready(function() {document.getElementById("result").value = "正在获取运行结果··· ···";$("#btn_run").click(function(){// 先上传代码uploadSource();// 请求代码运行后的结果getResult();});});

演示

刚好有一个阿里云服务器,那么就放上去吧。这样也算是能够随时随地拥有一个可以正常使用的在线PHP环境了。

首页

点击“PHP代码”,给出提示

常规代码

操作数据库

总结

最后来回顾一下,本文主要是介绍了如何实现一个在线PHP编辑工具。满足了自己对于操作数据库的需求。

另外比较重要的一点就是,之所以没有使用表单的凡是提交/上传 源代码。就是因为使用表单的话,一旦提交的话,原来的表单内字段上的信息就全部消失了,这不利于后续的代码调试和修改。而采用ajax方式提交的话就没有这么多的限制了,反而能够更加自由的进行设计。

大致就是这么多了。PHP在线编辑工具还是比较容易实现的(相较于其他编程语言而言)。

或许我会着手实现一个Python的在线工具,谁知道呢。╭(╯^╰)╮

在线 PHP运行工具、数据库可控相关推荐

  1. 在线 PHP运行工具 数据库可控

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 摘要 实 ...

  2. HTML/CSS/Javascript在线代码运行工具(网站汇总)

    平时需要编写些HTML和JS代码,所以业余时间找了下相关线上运行HTML和JS的网站,这里汇总一下. 这里面收集的网站地址,都可以在"程序员快速导航网" 上找到. 附地址:程序员快 ...

  3. python在线工具-在线 Python运行工具

    在下面写上您的Python代码. name="source" placeholder="echo 'Hello World!';">print " ...

  4. python在线运行-在线 Python运行工具

    在下面写上您的Python代码. name="source" placeholder="echo 'Hello World!';">print " ...

  5. 好用的php运行工具

    1.php环境: 链接:https://pan.baidu.com/s/1ML9agM1DHIxm55GLd0cB1A  提取码:4n6m 备用下载: 链接:https://pan.baidu.com ...

  6. C语言在线代码运行编译工具推荐

    C语言在线运行编译,是一款可在线编程编辑器,在编辑器上输入C语言代码,点击运行,可在线编译运行C语言,C语言代码在线运行调试,C语言在线编译,可快速在线测试您的C语言代码,在线编译C语言代码发现是否存 ...

  7. Lua语言在线代码运行编译工具推荐

    Lua语言在线运行编译,是一款可在线编程编辑器,在编辑器上输入Lua语言代码,点击运行,可在线编译运行Lua语言,Lua语言代码在线运行调试,Lua语言在线编译,可快速在线测试您的Lua语言代码,在线 ...

  8. PHP语言在线代码运行编译工具推荐

    PHP语言在线运行编译,是一款可在线编程编辑器,在编辑器上输入PHP语言代码,点击运行,可在线编译运行PHP语言,PHP语言代码在线运行调试,PHP语言在线编译,可快速在线测试您的PHP语言代码,在线 ...

  9. Pascal语言在线代码运行编译工具推荐

    Pascal语言在线运行编译,是一款可在线编程编辑器,在编辑器上输入Pascal语言代码,点击运行,可在线编译运行Pascal语言,Pascal语言代码在线运行调试,Pascal语言在线编译,可快速在 ...

  10. Fortran语言在线代码运行编译工具推荐

    Fortran语言在线运行编译,是一款可在线编程编辑器,在编辑器上输入Fortran语言代码,点击运行,可在线编译运行Fortran语言,Fortran语言代码在线运行调试,Fortran语言在线编译 ...

最新文章

  1. CRM问题:导入、导出实体错误
  2. 分布式架构springmvc+springboot+springcloud+redis
  3. c++ 多重背包状态转移方程_背包问题之零钱兑换
  4. #8ms平台,是一个支持ESP32/Sigamastar201、202/RK等硬件的开发平台,现平台Slogan有奖征集# 我们的广告语,将由你们来定!
  5. 如何给UI上可以接收focus事件的element动态注册onfocus处理函数
  6. java 复制对象_Java程序员必备:序列化全方位解析
  7. 计算机应用与基础实践怎么考,自考计算机基础应用科目笔试和实践性考试怎么考...
  8. Palindrome Index
  9. 基于K60/K66/LPC的HC-SR04超声波测距(附带代码)
  10. 奇偶个数 中国大学生mooc 翁恺 C语言
  11. 在Firefox中通过AJAX跨域访问Web资源
  12. python字典的常用方法_python操作字典类型的常用方法
  13. 【相机标定系列】单目相机,内参,外参
  14. 远程采集Linux硬盘信息,关关采集器利用远程SFTP采集 Linux放主站+windows采集教程...
  15. LINUX命令 VS DOS命令
  16. Seo:入门须知(三)网页快照投诉
  17. Tableau5——地图,仪表板
  18. 计算机双工模式,windows10系统如何设置网络双工模式?
  19. Task运行过程分析2
  20. [Matlab]椭圆滤波器设计:低通、高通、带通和带阻(4)

热门文章

  1. Python | Web Crawler
  2. win7系统64位下安装sql server2000时提示兼容性问题
  3. Python运维(六)--系统监控psutil、数据报scapy、扫描nmap
  4. 管理API访问令牌的最佳安全实践
  5. 河北关于加快新型建筑工业化发展的实施意见发布
  6. stLFR(single tube Long Fragment Read)介绍
  7. java swing企业人事管理系统 java swing mysql实现的企业人事管理系统源码和导入文档(1013)
  8. php 模拟登陆微云,微云 - HHTjim'S 部落格
  9. 4个方法判断食物的热量高低
  10. 2019-05-23 嗅探工具;影音嗅探;IRIS嗅探器;