76 lines
2.3 KiB
PHP
76 lines
2.3 KiB
PHP
<?php
|
||
// +----------------------------------------------------------------------
|
||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
// +----------------------------------------------------------------------
|
||
// | Author: CRMEB Team <admin@crmeb.com>
|
||
// +----------------------------------------------------------------------
|
||
namespace crmeb\utils;
|
||
|
||
use Exception;
|
||
|
||
/**
|
||
* 签名计算
|
||
* Class fileVerification
|
||
* @package crmeb\utils
|
||
*/
|
||
class fileVerification
|
||
{
|
||
public $path = "";
|
||
public $fileValue = "";
|
||
|
||
/**
|
||
* 项目路径
|
||
* @param string $path
|
||
* @return string
|
||
* @throws Exception
|
||
*/
|
||
public function getSignature(string $path): string
|
||
{
|
||
if (!is_dir($path) && !is_file($path)) {
|
||
throw new Exception($path . " 不是有效的文件或目录!");
|
||
}
|
||
|
||
$appPath = $path . DS . 'app';
|
||
if (!is_dir($appPath)) {
|
||
throw new Exception($appPath . " 不是有效的目录!");
|
||
}
|
||
|
||
$crmebPath = $path . DS . 'crmeb';
|
||
if (!is_dir($crmebPath)) {
|
||
throw new Exception($crmebPath . " 不是有效的目录!");
|
||
}
|
||
|
||
$this->path = $appPath;
|
||
$this->getFileSignature($appPath);
|
||
$this->path = $crmebPath;
|
||
$this->getFileSignature($crmebPath);
|
||
return md5($this->fileValue);
|
||
}
|
||
|
||
/**
|
||
* 计算签名
|
||
* @param string $path
|
||
* @return void
|
||
* @throws Exception
|
||
*/
|
||
public function getFileSignature(string $path)
|
||
{
|
||
if (!is_dir($path)) {
|
||
$this->fileValue .= @md5_file($path);
|
||
} else {
|
||
if (!$dh = opendir($path)) throw new Exception($path . " File open failed!");
|
||
while (($file = readdir($dh)) != false) {
|
||
if ($file == "." || $file == "..") {
|
||
continue;
|
||
} else {
|
||
$this->getFileSignature($path . DS . $file);
|
||
}
|
||
}
|
||
closedir($dh);
|
||
}
|
||
}
|
||
} |