首页 > 编程语言 >PHP 实现 PHP在线代码运行工具

PHP 实现 PHP在线代码运行工具

时间:2023-04-01 10:55:30浏览次数:40  
标签:在线 header 100% height 代码运行 xhr editor PHP

转载来源 https://www.cnblogs.com/XiaoMingBlingBling/p/14651830.html


 

demo源码下载:点击下载

 


 

HTML代码(index.html):

注:代码编撰区域使用开源项目 ACE (Ajax.org Cloud9 Editor) 实现

复制代码
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>PHP在线代码编辑器</title>
    <script src="./ace-build/ace.js" type="text/javascript" charset="utf-8"></script>
    
    <style type="text/css">
        html, body
        {
            height: 100%;
        }
        
        *
        {
            margin: 0px; padding: 0px;
        }
        
        #main
        {
            height: calc(100% - 50px);
        }
        
        #editor, #wall, #result
        {
            width: calc(50% - 30px); height: 100%; font-size: 14px; float: left;
        }
        
        #wall
        {
            width: 30px; background-color: #FBF1D3;
        }
        
        #result
        {
            height: calc(100% - 10px); padding: 5px; overflow-y: auto;
        }
        
        #header, #header-left, #header-right
        {
            height: 50px; line-height: 50px; background-color: #FBF1D3; float: left;
        }
        
        #header
        {
            width: 100%;
        }
        
        #header-left
        {
            width: 50%; font-size: 18px; text-align: center;
        }
        
        #btn
        {
            padding: 3px 5px; margin: 10px 30px 5px 0; line-height: 17px; cursor: pointer; float: right;
        }
    </style>
</head>
<body>
    <div id="header">
        <div id="header-left">
            XMSB — PHP在线代码运行工具
            
            <button type="button" id="btn">执行代码 [RUN]</button>
        </div>
    </div>
    
    <div id="main">
        <div id="editor"></div>
        <div id="wall"></div>
        <div id="result"></div>
    </div>
    
    <script type="text/javascript">
        var editor = ace.edit("editor");
        editor.setTheme("ace/theme/solarized_light");
        editor.session.setMode("ace/mode/php");
        
        editor.setValue("<?php \n\t$xmsb = 'PHP在线代码运行工具';\n\techo $xmsb;", 1);
    </script>
    
    <script type="text/javascript">
        var btn = document.getElementById('btn');
        btn.onclick = function()
        {
            var xhr = null;
            if(window.XMLHttpRequest)
            {
                xhr = new XMLHttpRequest();
            }
            else if(window.ActiveXObject)
            {
                xhr = new ActiveXObject('Microsoft.XMLHTTP');
            }
            
            xhr.onreadystatechange = function()
            {
                if(xhr.readyState == 4 && xhr.status == 200)
                {
                    document.getElementById('result').innerHTML = xhr.response;
                }
            }
            
            xhr.open('POST', `run.php`, true);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            xhr.send('code=' + editor.getValue());
        }
    </script>
</body>
</html>
复制代码

 


 

PHP代码(run.php):

复制代码
<?php
ini_set('display_errors', 0);
ini_set('xdebug.overload_var_dump', '1');

error_reporting(E_ALL);
set_error_handler('handle_error');
set_exception_handler('handle_exception');
register_shutdown_function('shutdown_function');

function handle_error($error_level, $error_message, $error_file, $error_line, $error_context)
{
    ob_end_clean();
    echo "[第" . $error_line . "行] " . "发生错误:" . $error_message;
    die();
}

function handle_exception($exception)
{
    ob_end_clean();
    echo "[第" . $exception -> getLine() . "行] " . "发生错误:" . $exception -> getMessage();
    die();
}

function shutdown_function()
{
    $error = error_get_last();
    if(!empty($error))
    {
        ob_end_clean();
        echo "[第" . $error['line'] . "行] " . "发生错误:" . $error['message'];
        die();
    }
}

if(!empty($_POST))
{
    $code = trim($_POST['code'], "<?php");
    
    ob_start();
    eval($code);
    $output = ob_get_contents();
    ob_end_clean();
    
    echo $output;
}
复制代码

 

标签:在线,header,100%,height,代码运行,xhr,editor,PHP
From: https://www.cnblogs.com/yisuo/p/17278224.html

相关文章

  • php Trait基类use trait,本类不use
    一回顾trait使用https://blog.csdn.net/bushuwei/article/details/103514174发现之前本人说明很模糊,自己居然不知道为什么其实这里的$c,就是classB再次回顾逻辑二分析self和static区别说的没毛病Trait基类usetrait,本类不use。那么如果用的newself,则你new出来的就是......
  • PHPExcel读取和设置日期格式
    1.读取excle中的日期$val=$PHPExcel_sheet->getCellByColumnAndRow(ord('I')-65,3)->getValue();echodate("Y-m-d",PHPExcel_Shared_Date::ExcelToPHP($val));die;  2.设置导出excle表格中日期格式$resultPHPExcel->getActiveSheet()->setCellValu......
  • PHP strtotime获取上个月月份的问题
    在PHP获取上个月时,我们常常使用strtotime('-1month');或者strtotime('lastmonth');来获取上个月的同一天的时间但是前28天内是没有问题的,当上个月或者下个月不存在同一天的时候,就会出现问题,如果今天是3月31日,使用该方法时取的将会是3月3日的时间,因为程序获取......
  • 烟雨黑帽技术程序演示:AI智能模板在线制作制作神器-单域名版+多域名版-一键批量制作黑
    烟雨黑帽程序演示:AI智能模板制作神器,用于一键制作黑帽程序模板、零基础小白神器,可直接对接到你程序下使用,支持批量或单个模板的制作。适用于寄生虫、泛目录、站群、蜘蛛池等黑帽程序模板的制作。程序使用极其简单,只需要准备好你想要的模板链接,支持首页或内页,放程序里一键制作即......
  • php站点导入大mysql文件(linux系统)
    问题描述:站点数据多,mysql导出后大于1G,使用phpmyadmin,导入一半报错,白白浪费等待时间,使用navicat导入,执行时间过长提示错误解决思路:1.拆分mysql文件,分批次导入,亲测还是比较花费时间,小于100M可以尝试,大于100M不推荐2.推荐使用进入linux系统导入mysql,步骤如下:2.1:把导出的.sql大文......
  • PHP 配置的详细记录
    PHP配置的详细记录一、php配置的目的让PHP的php-fpm(PHPFastCGI管理器)程序能更好地与nginx服务器的进行通信二、进行php配置1.php配置文件位置2.查看是否有php配置文件$cd/usr/local/php8.1/etc --进入文件夹$ls --查看文件夹里的内容php.ini --就是php的配置文......
  • 使用PHP调用OpenAI ChatGPT API接口
    本文介绍如何使用PHP调用OpenAI的文本完成模型ChatGPT的API接口,同时也包括图片生成模型DALL·E接口的调用。 一、SDK实现OpenAI的PHPSDK实现如下,其中ChatGPT使用的模型为gpt-3.5-turbo,如果已经有ChatGPTPlus,并申请到GPT-4的API权限,可以改为GPT-4的模型。classclass_openai......
  • PageOffice 在线编辑 office文件,回调父页面
    一、子页面调用父页面的方法varvalue=window.external.CallParentFunc("ParentFunName(Arguments);");//父页面的JS函数有返回值window.external.CallParentFunc("ParentFunName(Arguments);");//父页面的JS函数无返回值二、是否需要传递参数(子页面关闭窗口的同时刷新父页面......
  • 百度普通收录API提交token推送在线版+随机URL生成+抓取内页URL工具
    普通收录:百度站长平台官方给出的使用说明如下1、普通收录工具可以向百度搜索主动推送资源,缩短爬虫发现网站链接的时间,不保证收录和展现效果。2、API提交和手动提交共享配额......
  • php 浮点数转int精度丢失问题解决办法
    方案一:先将浮点金额strval后再转int。(推荐)$param['order_price']=intval(strval($param['order_price']*100)); 方案二: echoround(19.99*100); 这种方案出来是......