一个简单的图片加解密函数,使用client跑,不要使用浏览器跑
话不多说,直接上代码
<?php
/**
* Created by hello.
* User: qq 845875470
* Date: 2016/4/2
* Time: 11:21
*/
$notice = <<<A
为了稳定性,必须在客户端跑
格式 :php path=D:/xxx/uuu type=en is_copy=1 salt=xxx
参数使用空格分开
path -- 路径 必须写
type -- en加密, de为解密 必须写
is_copy -- 1为复制,0为转移, 不写默认为转移
salt -- 加密钥匙 加密用什么,解密就用什么 不写默认为salt
A;
//如果不是客户端
if(PHP_SAPI != "cli") {echo $notice;die;}
//获取参数
$arr = parse_parameter($argv);
//如果路径没设置
if(!isset($arr["path"]) || !isset($arr["type"])) {echo $notice;die;}
//如果is_dir没设置
if(!isset($arr["is_copy"])) {$arr["is_copy"] = "";}
//如果salt没设置
if(!isset($arr["salt"])) {$arr["salt"] = "";}
//type为en就加密
if($arr["type"] == "en") img_enconde($arr["path"], $arr["is_copy"], $arr["salt"]);
//type为de就解密
if($arr["type"] == "de") img_deconde($arr["path"], $arr["is_copy"], $arr["salt"]);
function parse_parameter($argv)
{
$arr = array();
//获取参数
for($len=count($argv)-1; $len--; )
{
list($key, $val) = explode("=", $argv[$len]);
$arr[$key] = $val;
}
return $arr;
}
//图片加密函数
//路径文件夹
//是否为复制(默认不复制)
//盐(默认为salt)
function img_enconde($path, $is_copy = 0, $salt = "salt")
{
$time1 = microtime(1);
$handle = opendir($path);
if(!$salt) $salt = "salt";
if($handle)
{
echo "路径:" . $path . "
";
//在指定文件夹下创建临时文件夹
$temp_dir = $path . "\" . "temp";
@mkdir($temp_dir, 0777, 1);
while ($file = readdir($handle))
{
$time2 = microtime(1);
//构造当前文件绝对地址
$dir_path = $path . "\" . $file;
//获取文件后缀
$suffix = strrchr($file, ".");
//图片后缀
$fix = array(".jpg", ".gif", ".bmp", ".png", ".jpeg", ".JPG", ".GIF", ".BMP", ".PNG", "JPEG");
if(is_file($dir_path) && in_array($suffix, $fix))
{
//打开当前文件
$fh = fopen($dir_path, "r");
//打开文件为流
$stream = fread($fh, filesize($dir_path));
//输出
file_put_contents($temp_dir . "\" . uniqid("",1), $file . "!" . $salt . "@" . $stream);
//关闭句柄
fclose($fh);
//是否为复制
//1为复制,0为删除(默认)
if(!$is_copy)
{
echo "加密并删除 : " . $dir_path . "
";
@unlink($dir_path);
}
else
{
echo "加密 : " . $dir_path . "
";
}
$time3 = microtime(1);
echo "此图用时 ", ($time3 - $time2), " S
", "已经用时 ", ($time3 - $time1), " S
";
}
}
echo "加密完成
";
}
else
{
echo "path invalid ";
return false;
}
}
//图片解密函数
//路径文件夹
//是否为复制(默认不复制)
//盐(默认为salt)加密写什么,这里就写什么
function img_deconde($path, $is_copy = 0, $salt = "")
{
$time1 = microtime(1);
$handle = opendir($path);
if($handle)
{
echo "路径:" . $path . "
";
if(!$salt) $salt = "salt";
//在指定文件夹下创建临时文件夹
$temp_dir = $path . "\" . "temp";
@mkdir($temp_dir, 0777, 1);
//核心正则
$reg = "#^(.+?[jpgifbmne]{3,4})!(" . $salt . ")@#im";
$res = array();
$count = 0;
while ($file = readdir($handle))
{
$time2 = microtime(1);
//构造当前文件绝对地址
$file_path = $path . "\" . $file;
if(is_file($file_path))
{
//文件句柄
$hf = fopen($file_path, "r");
//返回流
$stream = fread($hf, filesize($file_path));
fclose($hf);
//匹配加的密码
if(preg_match_all($reg, $stream, $res))
{
$count++;
//清空盐
$stream = str_replace($res[0][0], "", $stream);
//输出文件
file_put_contents($temp_dir . "\" . $res[1][0], $stream);
//是否为复制
//1为复制,0为删除(默认)
if(!$is_copy)
{
echo "成功解密删除 : " . $temp_dir . "\" . $res[1][0] . "
";
@unlink($file_path);
}
else
{
echo "解密 : " . $temp_dir . "\" . $res[1][0] . "
";
}
}
$time3 = microtime(1);
echo "此图用时 ", ($time3 - $time2), " S
", "已经用时 ", ($time3 - $time1), " S
";
}
}
if(!$count)
{
echo "没有有效的加密文件
";
return false;
}
echo "解密完成
";
}
else
{
echo "path invalid ";
return false;
}
}
?>
以上就是这篇文章的全部内容,希望对大家的学习或者工作能有一定的帮助。