在线 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的在线工具,谁知道呢。╭(╯^╰)╮

目录
相关文章
|
11天前
|
NoSQL 关系型数据库 MySQL
不是 PHP 不行了,而是 MySQL 数据库扛不住啊
【9月更文挑战第8天】这段内容讨论了MySQL在某些场景下面临的挑战及其原因,并指出这些问题不能完全归咎于MySQL本身。高并发读写压力、数据量增长以及复杂查询和事务处理都可能导致性能瓶颈。然而,应用程序设计不合理、系统架构不佳以及其他数据库选择和优化策略不足也是重要因素。综合考虑这些方面才能有效解决性能问题,而MySQL通过不断改进和优化,仍然是许多应用场景中的可靠选择。
|
14天前
|
NoSQL 关系型数据库 PHP
php连接数据库
要使用PHP连接PolarDB或MongoDB数据库,需先准备连接信息,并编写相应代码。对于PolarDB,需设置主机地址、端口、数据库名及凭据,使用`pg_connect`函数建立连接;而对于MongoDB副本集,需安装MongoDB PHP驱动,通过`MongoDB\Client`连接指定的副本集实例。请确保替换示例代码中的占位符为实际值,并正确配置副本集名称和主机信息。更多详细信息与示例代码,请参考相关链接。
125 72
|
24天前
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
160 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
23天前
|
存储 前端开发 关系型数据库
秀啊,用Python快速开发在线数据库更新修改工具
秀啊,用Python快速开发在线数据库更新修改工具
|
23天前
|
前端开发 数据库 Python
用Python轻松开发数据库取数下载工具
用Python轻松开发数据库取数下载工具
|
2天前
|
安全 Shell Linux
从命令行界面运行交互式PHP Shell
从命令行界面运行交互式PHP Shell
|
24天前
|
SQL 关系型数据库 MySQL
PHP与数据库交互的艺术:深入探讨PDO扩展
【8月更文挑战第28天】在数字信息时代的海洋里,PHP作为一艘灵活的帆船,承载着无数网站和应用的梦想。而PDO扩展,则是这艘帆船上不可或缺的导航仪,指引着数据安全与效率的航向。本文将带你领略PHP与数据库交互的艺术,深入浅出地探索PDO的世界,从连接数据库到执行复杂的查询,每一步都清晰可见。我们将一起航行在这段奇妙的旅程上,解锁数据的奥秘,体验编程的乐趣。
13 1
|
30天前
|
存储 缓存 NoSQL
Redis内存管理揭秘:掌握淘汰策略,让你的数据库在高并发下也能游刃有余,守护业务稳定运行!
【8月更文挑战第22天】Redis的内存淘汰策略管理内存使用,防止溢出。主要包括:noeviction(拒绝新写入)、LRU/LFU(淘汰最少使用/最不常用数据)、RANDOM(随机淘汰)及TTL(淘汰接近过期数据)。策略选择需依据应用场景、数据特性和性能需求。可通过Redis命令行工具或配置文件进行设置。
41 2
|
1月前
|
前端开发 PHP 开发者
React Server Component 使用问题之怎么使用Docker运行PHP应用
React Server Component 使用问题之怎么使用Docker运行PHP应用
|
1月前
|
关系型数据库 MySQL 数据库连接
PHP数据库连接
PHP数据库连接
27 2