我做了一个项目,但是领导要求我给这个项目加一个使用期限,时间是2017年10月1日之前使用,时间过了之后就没有办法用了。
我想到的第一个办法就是获取本地时间,来判断是不是超过10月1日,这个方法相信大家都会的,就不说了。但是这个方法有一个bug,就是更改一下电脑时间项目就可以继续使用了,并不能满足我的需求。
下面来介绍一下我最后想到的一个方法,结合php实现给网页加一个使用期限
一、首先来说一下html何如调用php
html部分
<script type="text/javascript" src="b.php?action=test"></script>
b.php
<?php
$action=$_GET['action'];
echo "document.write('".$action."');n";
?>
二、加密方法
建一个common文件夹,里面放6个文件,后缀名.ini ,例如config.ini,kernel.ini,libexpat.ini,resource.ini,SettingApp.ini,yuntorrentfile.ini ,然后分别在这6个文件里面写6个任意的10位数的数字
比如:
1222387944
7412563214
9632563214
7452136985
8529631458
1507996800
一定要分段写入。这里用了6个.int文件,我们实际只要操作一个文件就可以 了,其余的只是混淆视觉,为了不让别人那么容易看出来我们的加密方式。
-* 先说一下实现的思路*
其实就是利用php读文件,写文件。先获取今天的时间戳,然后把.ini里的最后一组数字改写成今天的时间戳。改写的时候是需要先判断的,如果今天的时间戳小于我.ini里的最后一组数字,则不改写,即还是原来的数据。如果大于就改写成今天的,这样就防止了有人改电脑的本地时间的问题。
接着拿.ini里的最后一组数字和2017年10月1日的时间戳做比较,如果小于,程序正常,如果大于可以隐藏程序的一些开始按钮等等,以至于程序不能正常使用即可
下面贴代码:
b.php部分:
<?php
header("Content-type: text/html; charset=utf-8");
$action=$_GET['action'];
/*获取时间戳*/
$t= time() ;
/*随机获取10位数字*/
$num=mt_rand(1000000000,9999999999);
//mktime()把指定时间转化为时间戳
/*循环读取文件*/
$dir="common";
$file=scandir($dir);
//循环打开文件
for ($a=2; $a <8 ; $a++) {
/*打开文件*/
$fh=fopen($dir."/".$file[$a],"r+");
$i = 1;
while (!feof($fh)) {
if ($i == 1) {
fseek($fh, 0, SEEK_CUR);
fwrite($fh, $num);
//这里的修改是替换形式,如果修改后这一行的长度比原来短,那么可以用空格填充到原来长度,这样实现修改,而且不影响后面的内容,但是修改后的比原来长就麻烦了,
break;
}
fgets($fh);
$i++;
}
fclose($fh);
} ;
/*指定读取yuntorrentfile.ini文件*/
$c = getLine($dir."/yuntorrentfile.ini", 5); // 读取yuntorrentfile.ini第5行内容
$jiezhi= getLine($dir."/config.ini", 6); // 读取yuntorrentfile.ini第5行内容
/**
* 获取指定行内容
*
* $file 文件路径
* $line 行数
* $length 指定行返回内容长度
*/
function getLine($file, $line, $length = 4096){
$returnTxt = null; // 初始化返回
$i = 1; // 行数
$handle = @fopen($file, "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, $length);
if($line == $i) $returnTxt = $buffer;
$i++;
}
fclose($handle);
}
return $returnTxt;
};
if($t>$c){
$file_name=$dir."/yuntorrentfile.ini";
/*打开文件*/
$str=file_get_contents($file_name);
/*替换字符串*/
$str=str_replace($c, $t.PHP_EOL, $str);
/*写入文件*/
file_put_contents($file_name, $str);
};
/*判断我存储的第5行数据是否小于截止的时间戳*/
if($c<$jiezhi){
$action="1";
}else{
$action="0";
}
echo "document.write('<span data=".$action." id=jieshou></span>')";
?>
js部分
/*获取接受的值*/
var msg= $('#jieshou').attr("data");
if(msg==1){
/*1表示时间没有到*/
}else if(msg==0){
/*0表示过期了*/
}
这样就结束了
如果大家有更好的思路可以留言,如果我写的还有什么问题也可以提出,谢谢大家