apache+python+php+mysql集成环境安装包

一款使用JS框架制作开源的环境集成,代码在test.js文件里
apache+python+php+mysql(mariadb)+phpmyadmin集成包
这里要用到xxjs 是基于原生js封装的一个框架 体积只有1M很小
例子下载 点击下载》》 有报毒请放行,被杀了就不能用了,下载后直接运行就可以了
代码是开源的,

硬盘坏了,文件没了,已不再更新,有bug,,不过功能够用,可以拿去改装打包新的环境包

预览图:
在这里插入图片描述
例子代码 test.js

var path = 文件.完整路径( "/" );//获取根目录完整路径
path = path.replace("\\", "\/");
path = path.replace("\\", "\/");//需要两次 路径要调对
//echo(path);	return;	替换主要是会被转义,
//该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
			//修改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"+'"');
			conf+= '\r\n ServerName xxjs2 ';
			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', //原版未改动
			'保存目录':'php',
			'描述':'正在安装更新php'
		}
    if(安装更新(dd)==200){
		文件.重命名("/php/php.ini-production","/php/php.ini"); //用'/'操作  '\'要转义
		系统.系统变量('path',path+'php');//注册系统变量 可以不注册
		//修改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); //这里前面没/
		var conf2=string.load(path+'apache/conf/httpd.conf');//修改apache支持
		if(conf2.indexOf("LoadModule php7_module")== -1){ //判断是不是已经配置过了
		//配置php运行支持 如果这里配置的是FastCGI模式 请将php改成NTS版本 同时也不能用下面的写法
			conf2+='\r\n #开始设置PHP" ';
			conf2+= '\r\n LoadModule php7_module "'+path+'php/php7apache2_4.dll" ';
			conf2+= '\r\n <VirtualHost *:807 >';
			conf2+= '\r\n  ServerAdmin "php.com"';
			conf2+= '\r\n  DocumentRoot "'+path+'phpwww"';
			conf2+= '\r\n <Directory "'+path+'phpwww"> ';
			conf2+= '\r\n    Options Indexes FollowSymLinks	';
			conf2+= '\r\n    AllowOverride None	';
			conf2+= '\r\n    Require all granted';
			conf2+= '\r\n </Directory>';
			conf2+= '\r\n  <IfModule mime_module>\r\n     AddType application/x-httpd-php .php \r\n  </IfModule>';
			conf2+= '\r\nPHPIniDir "'+path+'php" '; //php路径
			conf2+= '\r\n </VirtualHost> ';
			string.save(path+'apache/conf/httpd.conf',conf2);
		}
		print({'code':'200','msg':'安装更新PHP成功,请查看根目录'});
	}else{print({'code':'300','msg':'安装更新PHP失败'});} 
}
//apache配置python wsgi	,你需要安装python,记的选择注册环境变量,安装请百度
var dpython=function(){ 
	var dd={
		//可以到https://www.python.org/ftp/python/3.8.5/python-3.8.5-amd64.exe 下载  后打包为zip文件 
			'更新地址':'http://down.ccxcc.cc:803/server/python-3.8.5-amd64.zip', //原版未改动
			'保存目录':'pythondown',//安装完后手动删除该目录
			'描述':'正在安装更新python-3.8.5'
		}
    if(安装更新(dd)==200){
		文件.打开("/pythondown/python-3.8.5-amd64.exe");//运行安装包程序
		
		print({'code':'200','msg':'已下载完毕,正在执行手动安装,请勾选"Add Python 3.8 to PATH,点Customize installation执行安装" 安装完后,请手动删除pythondown目录'});
	}
	return;
}
//安装flask和配置wsgi 设置所需环境变量
var dpython2=function(){
	var dd={ 
		//可以到https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载 对应 wsgi模块将下载的文件后缀改为zip,解压出来,拷贝mod_wsgi.xxx.pyd 文件就是下面下载的文件
			'更新地址':'http://down.ccxcc.cc:803/server/mod_wsgi.cp38-win_amd64.zip', //原版未改动
			'保存目录':'python',
			'描述':'正在安装更新mod_wsgi.cp38-win_amd64 for apache'
		}
    if(安装更新(dd)==200){
		系统.系统变量('PATH','D:/python38');//注册环境变量 此处是安装路径
		系统.系统变量('PYTHONPATH','D:/python38');
		系统.系统变量('PYTHONHOME','D:/python38');//注册环境变量 
		文件.打开('cmd.exe','/k pip install flask');//安装python flask框架
		var conf=string.load(path+'apache/conf/httpd.conf');//修改apache支持
		if(conf.indexOf("LoadModule wsgi_module")== -1){ //判断是不是已经配置过了
			conf+='\r\n #开始设置PYTHON 这里和PHP用同个域设置,本地调试请先删除httpd.conf里的php设置" ';
			conf+='\r\n LoadModule wsgi_module "'+path+'python/mod_wsgi.cp38-win_amd64.pyd" '; 
			conf+='\r\n NameVirtualHost 127.0.0.1:807"';
			conf+='\r\n <VirtualHost *:807 >"';
			conf+='\r\n   ServerAdmin "python.com"';
			conf+='\r\n   DocumentRoot "'+path+'pywww"';
			conf+='\r\n <Directory "'+path+'pywww">';
			conf+='\r\n   Options Indexes FollowSymLinks';
			conf+='\r\n   AllowOverride None';
			conf+='\r\n   Require all granted ';
			conf+='\r\n </Directory>';
			conf+='\r\n WSGIScriptAlias / "'+path+'pywww/test.wsgi"'; 
			conf+='\r\n </VirtualHost>';
			string.save(path+'apache/conf/httpd.conf',conf);
		}
		var test='';
			test+='import sys';
			test+='\r\nsys.path.insert(0, "'+path+'pywww")';
			test+='\r\nfrom index import app';
			test+='\r\napplication = app';
		   string.save(path+'pywww/test.wsgi',test);//utf-8格式保存
		print({'code':'200','msg':'配置python wsgi成功,请查看根目录'});
	}else{print({'code':'300','msg':'配置python wsgi失败'});}
	
}
//下载phpmyadmin
var dphpmyadmin=function(){ 
	var dd={
		//https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip
			'更新地址':'http://down.ccxcc.cc:803/server/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 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 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 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 'a1':
			文件.打开("notepad.exe",path+"apache/logs/error.log"); //用记事本打开
			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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rllmqe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值