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

简介: 摘要实现思路简要解释工具原理制作mainphp上传源码ajax上传源码获取运行结果触发时机演示首页点击PHP代码给出提示常规代码操作数据库总结摘要不知道大家有没有看到过这样的一个网站。

摘要

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

菜鸟工具

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

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

实现思路

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

简要解释

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

<?php

echo "Hello PHP";

浏览器访问的时候,得到的数据如下:
temp.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的在线工具,谁知道呢。╭(╯^╰)╮

目录
相关文章
|
13天前
|
监控 关系型数据库 MySQL
初体验:数据库监控、管理和可观测性工具(PMM)
Percona Monitoring and Management (PMM) 是一个开源工具,用于监控MySQL、PostgreSQL和MongoDB的性能。它提供实时监控、数据可视化、故障排除和管理功能,支持本地和云端数据库。要安装PMM,首先需安装Docker,然后通过提供的脚本部署PMM服务器和客户端。在MySQL服务器上创建PMM用户后,使用`pmm-admin`命令添加数据库。访问PMM的HTTPS网址(默认用户名和密码为admin)进行配置。本文还包含了安装Docker和PMM的命令行步骤。
初体验:数据库监控、管理和可观测性工具(PMM)
|
4天前
|
SQL 存储 关系型数据库
性能诊断工具DBdoctor如何快速纳管数据库PolarDB-X
DBdoctor是一款基于eBPF技术的数据库性能诊断工具,已通过阿里云PolarDB分布式版(V2.3)认证。PolarDB-X是阿里云的高性能云原生分布式数据库,采用Shared-nothing和存储计算分离架构,支持高可用、水平扩展和低成本存储。PolarDB-X V2.3.0在读写混合场景下对比开源MySQL有30-40%的性能提升。DBdoctor能按MySQL方式纳管PolarDB-X的DN节点,提供性能洞察和诊断。用户可通过指定步骤安装PolarDB-X和DBdoctor,实现数据库的管理和性能监控。
|
4天前
|
Cloud Native 关系型数据库 分布式数据库
数据库性能诊断工具DBdoctor通过阿里云PolarDB产品生态集成认证
DBdoctor(V3.1.0)成功通过阿里云PolarDB分布式版(V2.3)集成认证,展现优秀兼容性和稳定性。此工具是聚好看科技的内核级数据库性能诊断产品,运用eBPF技术诊断SQL执行,提供智能巡检、根因分析和优化建议。最新版V3.1.1增加了对PolarDB-X和OceanBase的支持,以及基于cost的索引诊断功能。PolarDB-X是阿里巴巴的高性能云原生分布式数据库,兼容MySQL生态。用户可通过提供的下载地址、在线试用链接和部署指南体验DBdoctor。
|
13天前
|
PHP 数据库
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务-2
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务
|
13天前
|
存储 PHP Apache
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务-1
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务
|
13天前
|
运维 Prometheus 监控
矢量数据库系统监控与运维:确保稳定运行的关键要素
【4月更文挑战第30天】本文探讨了确保矢量数据库系统稳定运行的监控与运维关键要素。监控方面,关注响应时间、吞吐量、资源利用率和错误率等指标,使用Prometheus等工具实时收集分析,并有效管理日志。运维上,强调备份恢复、性能调优、安全管理和自动化运维。关键成功因素包括建立全面监控体系、科学的运维策略、提升运维人员技能和团队协作。通过这些措施,可保障矢量数据库系统的稳定运行,支持业务发展。
|
14天前
|
安全 关系型数据库 MySQL
【PHP开发专栏】PHP PDO与MySQLi操作数据库
【4月更文挑战第30天】PHP数据库交互的核心是PDO和MySQLi。PDO提供数据访问抽象层,支持多种数据库,强调安全和灵活性;MySQLi则专为MySQL设计,有面向对象和过程化接口。两者都支持预处理语句,防止SQL注入。选择取决于项目需求,如可移植性、特定功能和API偏好。了解其使用有助于编写安全高效的代码。
|
14天前
|
关系型数据库 MySQL PHP
【PHP 开发专栏】PHP 连接 MySQL 数据库的方法
【4月更文挑战第30天】本文介绍了 PHP 连接 MySQL 的两种主要方法:mysqli 和 PDO 扩展,包括连接、查询和处理结果的基本步骤。还讨论了连接参数设置、常见问题及解决方法,如连接失败、权限和字符集问题。此外,提到了高级技巧如使用连接池和缓存连接信息以优化性能。最后,通过实际案例分析了在用户登录系统和数据管理中的应用。
|
14天前
|
SQL NoSQL 关系型数据库
【好用】Star超36.8k,一个的免费通用数据库管理工具
关于数据库管理工具,大家可能都在用SQLyog、Navicat、MySQL-Front、SQL Studio、MySQL Workbench等等,这些管理工具不是不好用,就是要变魔术才可以用,今天 V 哥给大家推荐一个即好用,又免费的可视化通用数据库管理工具,让你再也不用偷偷摸摸的了,光明正大放心用,真心好用。
|
14天前
|
SQL 缓存 PHP
【PHP开发专栏】PHP数据库查询优化技巧
【4月更文挑战第29天】本文探讨了PHP数据库查询优化技巧,包括数据库设计的规范化与反规范化,合理使用索引,优化查询逻辑,以及避免SELECT *。在SQL查询优化中,利用EXPLAIN分析查询、优化JOIN操作和子查询,以及改进WHERE条件。PHP层面的优化涉及预处理语句、缓存查询结果、分页查询优化和异步处理。此外,还提到了高级技术如数据库分区、读写分离和分布式数据库。通过这些方法,开发者能提升查询效率,优化应用性能和用户体验。