apache+php+mysql+phpmyadmin集成环境包,使用javascript 框架编写,代码开源
这里需要用到xxjs 是我自己封装的一个js框架 体积只有1M很小
例子下载 点击下载》》 有报毒请放行,被杀了就不能用了,下载后直接运行就可以了
代码是开源的,
test.js文件内容
//该js文件为服务端js文件不能被前端js引用,服务端js相互间可以用include('/test2.js');这样来载入其他js文件 //下面的apache和php都需要你的电脑有vc15运行库 你也可以装vc运行库合集 //下载更新apache var dapache1=function(){ var dd={//必须是.zip格式,这里是演示,,实际可以改用你配置好的apache+php地址 这样就可以不用写配置文件那块了 '更新地址':'https://home.apache.org/~steffenal/VC15/binaries/httpd-2.4.43-win64-VC15.zip',//原版未改动 '保存目录':'apache',//相对根目录 前面不用加‘/’ 后面会将下载的文件解压到该目录 '描述':'正在安装更新Apache' } if(安装更新(dd)==200){ //这部分可以先把apache+php配置好,这样 下边就不用写这么多了, //以下写法apache的,其他程序也这样,如nginx,mysql,redis var path = 文件.完整路径("/");//获取根目录完整路径 path = path.replace("\\", "\/"); path = path.replace("\\", "\/");//需要两次 路径要调对 //return print({'msg':path}); //注意查看路径要对,后面的才能执行 //修改apapche配置文件 var conf=string.load(path+'apache/conf/httpd.conf'); conf = string.replace(conf,'SRVROOT "[^\"]+"','SRVROOT "'+path+'apache"'); //设置路径 conf = string.replace(conf,'Listen 80','Listen 807'); //设置端口 conf = string.replace(conf,'DocumentRoot "[^\"]+"','DocumentRoot "'+path+'www"'); //修改apache网站根目录 conf = string.replace(conf,'Directory "[^\"]+"','Directory "'+path+"www"+'"'); //配置php运行支持 如果这里配置的是FastCGI模式 请将php改成NTS版本 同时也不能用下面的写法 conf+= '\r\n<IfModule mime_module>\r\nAddType application/x-httpd-php .php \r\n</IfModule>' conf+= '\r\nPHPIniDir "'+path+'php" '; //php路径 conf+= '\r\nLoadModule php7_module "'+path+'php/php7apache2_4.dll" '; string.save(path+'apache/conf/httpd.conf',conf); print({'code':'200','msg':'安装更新apache成功,请查看根目录'}); }else{print({'code':'300','msg':'安装更新apache失败'});} } //下载更新php var dphp1=function(){ var dd={ '更新地址':'https://windows.php.net/downloads/releases/php-7.4.8-Win32-vc15-x64.zip', //原版未改动 TS版 '保存目录':'php', '描述':'正在安装更新php' } if(安装更新(dd)==200){ 文件.重命名("/php/php.ini-production","/php/php.ini"); //用'/'操作 '\'要转义 var path = 文件.完整路径("/");//获取根目录完整路径 path = path.replace("\\", "\/"); path = path.replace("\\", "\/");//需要两次 路径要调对 //修改php.ini配置文件 var conf=string.load("php/php.ini"); //这里前面没/ conf = string.replace(conf,';extension_dir = "ext"','extension_dir = "'+path+'php/ext"'); //开启mysqli conf = string.replace(conf,';extension=mysqli','extension=mysqli'); //开启mysqli string.save("php/php.ini",conf); //这里前面没/ print({'code':'200','msg':'安装更新PHP成功,请查看根目录'}); }else{print({'code':'300','msg':'安装更新PHP失败'});} } //下载phpmyadmin var dphpmyadmin=function(){ var dd={ '更新地址':'https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip', //原版未改动 '保存目录':'www/phpmyadmin', //放到www目录下 '描述':'正在安装更新phpmyadmin' } if(安装更新(dd)==200){print({'code':'200','msg':'安装更新phpmyadmin成功,请查看根目录'});}else{print({'code':'300','msg':'安装更新PHP失败'});} //运行http://127.0.0.1:807/phpmyadmin 提示需要打开mysqli //具体 打开php.ini 修改1、extension_dir=php路径/ext 2、去除extension=mysqli前面的分号 然后重启apache } //下载mariadb var dmariadb=function(){ var dd={ //https://mariadb.org/download/ '更新地址':'http://down.ccxcc.cc:803/server/mariadb-10.5.4-win32.zip', //在原版增加data/mysql 这个可以换成你自己的 '保存目录':'mariadb', //放到www目录下 '描述':'正在安装更新mariadb' } if(安装更新(dd)==200){ var path = 文件.完整路径("/");//获取根目录完整路径 path = path.replace("\\", "\/"); path = path.replace("\\", "\/");//需要两次 路径要调对 var str=''; str+='[mysqld]'; str+='\r\ndatadir='+path+'mariadb/data'; str+='\r\nport=3306'; str+='\r\ninnodb_buffer_pool_size=502M'; str+='\r\n[client]'; str+='\r\nport=3306'; str+='\r\nplugin-dir='+path+'mariadb/lib/plugin'; string.save("mariadb/my.ini",str); //这里前面没/,保存后是utf-8/ print({'code':'200','msg':'安装更新mariadb成功,请查看根目录'}); }else{print({'code':'300','msg':'安装更新mariadb失败'});} } //mariadb 数据库的启动,停止,删除 和apache的一样,参考apache //启动服务操作 var fqidong=function(){ if(!服务.是否存在("apache")){ var path = 文件.完整路径( "/" );//获取根目录完整路径 path = path.replace("\\", "\/"); path = path.replace("\\", "\/");//需要两次 路径要调对 var arg=path+'apache/bin/httpd.exe -k runservice'; //这里arg 是apache服务启动参数 需要完整路径 mysql也是这样创建服务,启动参数看后面注释 //apache服务的启动会偏慢点,,如果显示状态灯不准,,可以适当增加延迟时间 var ok=服务创建(arg,"apache","apache","我是一个apache的描述"); //这是个单独函数 不是"服务{}"对象的 if(ok){print({'code':'200','msg':'创建并启动apache服务成功'+ok});}else{print({'code':'300','msg':'创建apache服务失败'+ok});} }else{ var ok=服务.启动('apache'); if(ok){print({'code':'200','msg':'启动apache服务成功'+ok});}else{print({'code':'300','msg':'启动apache服务服务失败'+ok});} } return; } //创建服务 参数参考 路径要对上 (这些可以百度去查询,不一定要这么用); //memcached: memcached/memcached.exe -d runservice -l 127.0.0.1 -p 11211 //redis: redis/redis-server.exe --service-run //mysql: mysql/bin/mysqld.exe mysql //mariadb: mariadb/bin/mysqld.exe --defaults-file=bin/MariaDB/data/my.ini MariaDB //nginx: nginx/nginx_xxjs.exe //nginx 好像要自己写个服务器程序去启动,,可以用我的nginx_xxjs.exe //下载地址:http://down.ccxcc.cc:803/server/nginx.zip 或去扒一个 //停止服务操作 var ftingzhi=function(){ var ok=服务.停止('apache'); if(ok){print({'code':'200','msg':'停止apache服务成功'+ok});}else{print({'code':'300','msg':'停止apache服务服务失败'+ok});} return; } //重启服务操作 var fchongqi=function(){ var ok=服务.重启('apache'); if(ok){print({'code':'200','msg':'重启apache服务成功'+ok});}else{print({'code':'300','msg':'重启apache服务失败'+ok});} return; } //删除服务操作 var fshanchu=function(){ var ok=服务.删除('apache'); if(ok){print({'code':'200','msg':'删除apache服务成功'+ok});}else{print({'code':'300','msg':'删除apache服务失败'+ok});} return; } //服务状态判断 var fzhuangtai=function(){ var zt={} zt.color='#f00'; if(服务.是否运行("apache")){zt.color='#0f0';} if(服务.是否停止("apache")){zt.color='#cc0';} //绿色 黄色 红色 return print(zt); } //系统明细 var sys=function(){ var msg=''; msg+='</br>网卡信息:'+系统.网卡信息();//返回的json字符串 msg+='</br>内存信息:'+系统.内存信息(); // msg+='</br>cpu信息:'+系统信息.cpu信息(); //cpu使用率信息获取比较慢 msg+='</br>硬盘信息:'+系统.硬盘信息(); //不读取外置盘 msg+='</br>系统信息:'+系统.系统信息(); return print({'code':'200','msg':msg}); } var get=request.get; //启动mariadb服务操作 var qd2=function(){ if(!服务.是否存在("mariadb")){ var path = 文件.完整路径( "/" );//获取根目录完整路径 path = path.replace("\\", "\/"); path = path.replace("\\", "\/");//需要两次 路径要调对 var arg=path+'mariadb/bin/mysqld.exe --defaults-file='+path+'mariadb/my.ini mariadb'; var ok=服务创建(arg,"mariadb","mariadb","我是一个mariadb的描述"); //这是个单独函数 不是"服务{}"对象的 if(ok){print({'code':'200','msg':'创建并启动mariadb服务成功,你可以再刷新下让它启动'+ok});}else{print({'code':'300','msg':'创建mariadb服务失败'+ok});} }else{ var ok=服务.启动('mariadb'); if(ok){print({'code':'200','msg':'启动mariadb服务成功'+ok});}else{print({'code':'300','msg':'启动mariadb服务服务失败'+ok});} } return; } if(get['w']=='m_st'){qd2();return;} //注册mariadb if(get['w']=='m_del'){ //删除 mariadb 服务,,具体参考apache var ok=服务.删除('mariadb'); return; } if(get['w']){ switch(get['w']) { case 'a': 文件.打开("/apache/conf/httpd.conf"); break; case 'b': 文件.打开("/php/php.ini"); break; case 'c': 文件.打开("services.msc");//打开系统服务管理器 break; case 'c1': 文件.打开("Eventvwr.msc");//打开系统日志管理器 break; case 'd': 系统.系统变量('path','D:/xxjs2/php');//注册系统变量 break; case 'e': 文件.打开("重启.bat");//重启windows系统 //也可以下面这么写 加false是不弹出命令框 测试用命令 /k dir 试下 //文件.打开('cmd.exe','/c shutdown -r -f -t 1',false); break; case 'g': print(文件.输出('xxd.exe','-author')); print('<br/>'+文件.输出('cmd.exe','/c dir')); //var zz=文件.打开('cmd.exe','/c ipconfig /all > d:/1.log'); print('<br/>'+文件.输出('php/php.exe','-v')); //查看php版本 print('<br/>'+文件.输出('php/php.exe','D:/xxjs2/www/index.php')); //执行php文件 这里参数地址要绝对 break; default: break; } } if(request.post){ var post=request.post; //post传值对应方法 执行对应方法 if(post.st){ if(eval('typeof '+ post.st +' === "function"') ){ return eval(post.st+'()'); }else{ print({'code':'300','msg':'请求失败,没有对应方法'}); } } } return;