php中的active,用ActivePHP打造版本管理系统

用ActivePHP打造版本管理系统

学习PHP时,我们总是被教导到,PHP是一种服务器端脚本,是不能用来控制客户端的。而伴随着PHP5的发布,这句话就不是那么正确了。因为现在,PHP也可以用来写客户端脚本了。是的,你没有听错,用PHP写客户端脚本。

ActivePHP的安装

下面我们就来演示一下如何使用PHP写客户端脚本。首先,你需要下载PHP5在windows上的安装包,然后解压到一个目录里,比如:C:\Program Files\EasyPHP5\php,接着呢,进入windows的命令行模式,cd到你解压PHP5的目录,然后键入:

regsvr32 php5activescript.dll

回车以后,你就会看见一个成功提示:

这说明你已经可以使用ActivePHP了。好,下边我们就来写一个简单的脚本来测试下,仍然是全球通用的HelloWorld:P。

代码列表 ?>

$document->write( 'Hello World!' );

将上边的代码保存为Hello.htm,然后双击它,你就可以看见下边的结果了。

环境要求 ?>

PHP:5.0.0

OS: Windows

Browser: IE

嗯,效果不错,但是还不够有客户端的特色。让我们来修改下代码:

代码列表 ?>

$window->alert( 'Hello World!' );

再运行下看看~

是不是有些感觉了?

我们的版本管理系统

下边我们回过头来说说版本管理系统。我们要做的版本管理系统很简单,就是把开发目录下的文件和数据库的数据表打成一个RAR包,按时间命名并放到一个备份目录下。由于本文的主要目的是演示ActivePHP的使用,我们就不考虑对RAR包的管理和将其解压覆盖原有数据的内容了,不过对于一个版本管理系统来说,这部分是很重要的,建议大家自己完成;) 。

相关知识 ?>

Mysql的数据库是以文件形式存放在mysql/data目录下的,一个库对应着一个目录。

首先我们需要知道PHP调用Windows上其他程序的方法,那就是System命令。这个命令简单得和Echo一样,直接

System('command');

就可以了。

然后我们就需要知道RAR的命令行使用方法了,这种东西应该当然要找帮助文档了,就在RAR的安装目录下。在英文堆里看了好久,终于找到了一个方法:把要压缩的文件写到一个文本文件里,再把文件名作为参数,传给RAR。写成命令行就是:

rar.exe a path_to_save @file_list

生成这个文件对于PHP来说很简单,一个遍历函数就可以了,下边这两个函数是从PHP手册上的User Contribute 改进而来的。

代码列表 ?>

function R_walk($oldname, &$string)

{

if(is_file($oldname))

{

$string .= $oldname ."rn";

}

else if(is_dir ( $oldname ) )

{

R_dir_walk($oldname, $string);

}

else

{

die("Cannot add file: $oldname (it's neither a file nor a directory)");

}

}

function R_dir_walk($oldname, &$string)

{

$dir = opendir( $oldname );

while( $file = readdir( $dir ) )

{

if ( $file == "."

$file == ".." )

{

continue;

}

R_walk("$oldname/$file", $string);

}

closedir($dir);

}

有了这两个函数,生成列表文件就很容易了。

下边是实际操作部分的代码:

代码列表 ?>

$php_path = 'C:/Program Files/EasyPHP1-7/home/dev/R4/';

$mysql_path = 'C:/Program Files/EasyPHP1-7/mysql/data/r4/';

$date = date( "Y_m_d_H_i_s" );

$bakeup_path = 'D:/bakeup/R4/Backup_'.$date;

// copy file

R_walk( $php_path , $files );

// stop mysql

$window->alert( '即将关闭Mysql服务进程……' );

system( 'mysqladmin.exe -uroot shutdown' );

R_walk( $mysql_path , $files );

$files = str_replace( '/' , '\\' , $files );

write2_file( './info.txt' , $files );

$window->alert( '压缩开始,请不要手动关闭CMD窗口……' );

system( 'rar.exe a "' . $bakeup_path . '" @"./info.txt" ' );

$window->alert( '压缩完成,即将重启Mysql,请手动关闭下面弹出的CMD窗口……' );

// restart mysql

system( 'mysqld.exe&' );

上边的代码很简单,只说明几个地方

· Mysql在运行时会锁定数据表,所以我们要在压缩之前停止服务,压缩完成后再启动。

· System命令会等待命令完成后再继续向下执行,而mysqld.exe是后台服务,是不会停止的,所以程序到这里就进入了等待状态,手动关闭CMD窗口就可以了。

· 上边的rar和mysqld等程序的路径是添加到环境变量中的,所以不用指定。Windows XP添加环境变量的地方在:我的电脑(右键/属性)-> 高级 -> 环境变量 -> 系统变量(Path)中。

好了,添上上边的代码,存盘,再运行下看看:很方便吧,HoHo~ 文章就到这里,记得把功课做完:P

(出处:Viphot)

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

TAG标签:脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漫话:为什么计算机用补码存储数据?

作者 | 漫话编程来源 | 漫话编程我们知道,计算机只认识0和1,现实世界中的内容,无论是文字、音频、视频等等想要通过计算机存储、计算或者展示,都需要转换二进制。就像你刚刚唱的旋律,想要存储在计算机中也是要转成二进…

cad多个窗口并排显示_你早该这么做!并排查看Excel工作表其实一个小动作就搞定!...

特别福利:私信发送关键词【福利】,年度最全Office办公资源等你免费领哟~很多人都知道,有时在屏幕上并排查看起两个文件的内容,是一项非常顺畅和方便的操作——省去不少在不同窗口间来回切换的时间!当然,对于…

数据仓库如何实现湖仓一体数据分析?

简介: 随着云计算的普及和数据分析需求的扩大,数据湖数据仓库的湖仓一体分析能力成为下一代数据分析系统的核心能力。相对于数据仓库,数据湖在成本、灵活性、多源数据分析等多方面,都有着非常明显的优势。IDC发布的十项2021年中国…

Java应用全链路启动速度提升至15s,阿里云SAE能力再升级

简介: Java 作为一门面向对象编程语言,在性能方面的卓越表现独树一帜。但在高性能的背后,Java 的启动性能差也令人印象深刻,大家印象中的 Java 笨重、缓慢的印象也大多来源于此,高性能和快启动速度似乎有一些相悖。 近…

php组成,PHP的控制结构,PHP脚本是由一系列语句组成的。

任何 PHP 脚本都是由一系列语句构成的。一条语句可以是一个赋值语句,一个函数调用,一个循环,一个条件语句或者甚至是一个什么也不做的语句(空语句)。语句通常以分号结束。此外,还可以用花括号将一组语句封装成一个语句组。语句组本…

怎么取消苹果手机自动续费_知乎会员怎样取消自动续费

已开通连续订阅,需要从第三方支付账户( 或系统 )中关闭自动续费功能。否则自动续费仍有效,会持续扣费。
关闭路径如下:1.收到 【App store & Apple】 扣费账单的用户 (使用的是苹果支付方式&#xff0…

到底什么是“无源物联网”?

作者 | 小枣君来源 | 鲜枣课堂继Cat.1之后,2021年的物联网行业,又“喜提”了一个新的“风口”。这个“风口”的名字,叫做“无源物联网”。无源物联网,到底是个啥东东?它和现有的物联网技术之间,有什么区别&…

Gartner魔力象限到底有何“魔力”?

简介: Gartner魔力象限到底有何“魔力”?近日,Gartner发布了一系列最新魔力象限报告,在IT圈掀起了阵阵“龙卷风”,谁跻身全球第一阵营,谁跌出“领导者”象限,权威定调,众说纷纭&…

K8s 原生 Serverless 实践:ASK 与 Knative

简介: K8s 处在一个承上启下的位置,云原生用户使用 K8s 的目的是为了交付和管理应用,也包括灰度发布、扩容缩容等。但是对用户来说,实现这些能力,通过直接操作 K8s API 难免有些复杂。另外节省资源成本和弹性对于用户来…

react安装_前端大牛进阶---gt;React必会教程

一、背景介绍01React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源…

透过 3.0 Preview 看 Dubbo 的云原生变革

简介: 做过微服务开发的开发者相信对 Dubbo 都不陌生,Dubbo 是一款能帮助我们快速解决微服务开发、通信以及流量治理的框架。相比于之前只限定在 Java 语言范围内,Dubbo 的多语言版本在这两年呈现了良好的发展势头,其中&#xff0…

扩展云存储边界,阿里云推出全球首个云定义存储产品

云计算正带来一场消除线上线下存储边界的革命。 9月22日,阿里云宣布云存储服务全面升级,包括性能大幅提升300%、时延降低70%的ESSD云盘;可兼容HDFS的数据湖存储OSS,同时推出一款全新产品“云定义存储”(Cloud Defined…

php新闻添加图片,PHP操纵blob巧将图片存入ORACLE

下面是一个用PHP操纵blob字段的例子,这个例子实现的是把用户上传的图片文件存放到BLOB中。首先假设有一个表,结构如下:CREATE TABLE PICTURES (ID NUMBER,DESCRIPTION VARCHAR2(100),PICTURE BLOB);然后是用来处理数据的PHP程序代码。//建立O…

Go Mysql Driver 集成 Seata-Golang 解决分布式事务问题

简介: 2020 年 4 月,我们开始尝试实现 go 语言的分布式事务框架 Seata-Golang。众所周知,Seata AT 模式以无业务代码侵入的特点,被广大开发者推崇。Java 版 Seata AT 模式通过对 DataSource 数据源进行代理,在 sql 语句…

安装redis提示[test] error 2_技术干货分享:一次flask+redis的微服务实战

先说一下需求的场景,策划部门想做一个垂直领域的社区产品,类似与知乎那种,但受益人群是金融行业的从业人员。产品中有一个搜索问题的需求,搜索的问题去题库中进行模糊匹配,终端支持H5/APP/小程序,甚至是微信…

实现阿里云容器镜像服务反向访问代理

简介: 本文会先介绍镜像推送/拉取过程的交互逻辑来梳理需要代理的所有服务,再通过搭建一个公网 HTTPS 反向代理来访问容器镜像服务来向您展示多场景代理访问模式原理。 真实业务场景可能很复杂,因安全、合规、访问限制等原因可能需要&#x…

频谱扩展 matlab,语音信号频谱扩展

%% pr10_3_1clear all; clc; close all;filedir[]; % 设置路径filenamecolorcloud.wav; % 设置文件名fle[filedir filename]; % 构成完整的路径和文件名[x, fs, bits] wavread(fle); % 读入数据文件xx-me…

数字基础设施开源操作系统欧拉全新发布

在华为全联接2021上,面向数字基础设施的开源操作系统欧拉(openEuler)全新发布。欧拉操作系统可广泛部署于服务器、云计算、边缘计算、嵌入式等各种形态设备,应用场景覆盖IT(Information Technology)、CT&am…

二分k均值 matlab,Matlab函数kmeans:K-均值聚类

转自:http://hi.baidu.com/lewutian/item/35dd29efec13d0f5e1a5d418K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小。使用方法:IdxKmeans(X,K)[Idx,C]Kmeans(X,K)[Idx,C,sumD]Kmeans(X,K)[I…

mysql 聚簇索引和非聚簇索引_MySQL 聚簇索引 二级索引 辅助索引(上两期中奖名单)...

阅读文本大概需要3分钟。MySQL中每个表都有一个聚簇索引( clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引( secondary indexes )。以InnoDB来说,每个InnoDB表具有一个特殊的索引称为聚集索引。如果表上定义有主…