mtf.php文件代码:
<?php
error_reporting(0);
date_default_timezone_set("Asia/ShangHai");
/**
* 判断是否是函数
* @param $argument
* @return bool
*/
function is_function($argument)
{
return isset($argument) && is_callable($argument);
}
/**
* 判断是否是关联数组
* @param $arr
* @return bool
*/
function is_assoc($arr)
{
return array_keys($arr) !== range(0, count($arr) - 1);
}
/**
* 判断是否是数字
* @param $value
* @return bool
*/
function is_number($value)
{
return gettype($value) === "integer" || gettype($value) === "double" ? true : false;
}
/**
* 判断是否存在
* @param $var
* @param array $opt 这里的值代表了不存在的意思
* @return bool
*/
function is_exist($var, $opt = array("", null, false))
{
isset($var) || ($var = false);
return !in_array($var, $opt, true);
}
/**
* 是否是日期
* @param string $str
* @param string $format
* @return bool
*/
function is_date($str = '', $format = "Y-m-d")
{
$search = ["Y", "m", "d", "H", "i", "s"];
$replace = ["[0-9]{4}", "[0-9]{2}", "[0-9]{2}", "[0-9]{2}", "[0-9]{2}", "[0-9]{2}"];
$format = str_replace($search, $replace, $format);
return !!preg_match("/^$format$/i", $str);
}
/**
* 是否是日期时间
* @param string $str
* @param string $format
* @return bool
*/
function is_datetime($str = '', $format = "Y-m-d H:i:s")
{
return is_date($str, $format);
}
/**
* 是否是字符串
* @param string|int|double $str
* @return bool
*/
function y_string($str = '')
{
return !in_array($str, array('', null, false), true) && (is_string($str) || is_numeric($str));
}
/**
* 获取变量值
* @return bool|*
*/
function get_vars(){
$args = func_get_args();
$var = false;
foreach ($args as $arg) {
if(is_exist($arg)){
$var = $arg;
break;
}
}
return $var;
}
/**
* 返回毫秒
* @return float
*/
function m_second(){
$t = strval(microtime());
$l = explode(' ', $t);
$s = $l[1];
$ms = ~~(floatval($l[0]) * 1000);
$v = strval($s) . str_pad(strval($ms), 3, '0', STR_PAD_LEFT);
return (float)$v;
}
/**
* 返回微秒
* @return string
*/
function u_second(){
$t = strval(microtime());
$l = explode(' ', $t);
$s = $l[1];
$us = ~~(floatval($l[0]) * 1000000);
$v = strval($s) . str_pad(strval($us), 6, '0', STR_PAD_LEFT);
return $v;
}
function my_encode64($data){
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function my_decode64($data){
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
/**
*把字符串分割为数组(一维数组)
*@$str string 分割的字符串
*@$charset string 字符串编码
*/
function str_cut($str, $charset = 'utf-8')
{
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);
return $match[0];
}
/**
* 返回随机字符串
* @param int $l
* @param string $mode
* @param array $config
* @param string $charset
* @return string
*/
function randomString($l = 5, $mode = "n", $config = array(), $charset = "utf-8")
{
$C = array(
"n" => "0123456789",
"s" => "abcdefghijklmnopqrstuvwxyz",
"S" => "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"ns" => "0123456789abcdefghijklmnopqrstuvwxyz",
"nS" => "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"sS" => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
"nsS" => "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
"hex" => "0123456789abcdef",
"all" => "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_^+*=|,.~!@#",
);
if (is_array($config) && count($config) > 0) {
foreach ($config as $key => $value) {
$C[$key] = str_cut($value, $charset);
}
}
$mode = empty($C[$mode]) ? "n" : $mode;
$str = "";
if (is_array($C[$mode]) && count($C[$mode]) > 0) {
for ($i = 0, $len = count($C[$mode]); $i < $l; $i++) {
$str .= $C[$mode][mt_rand(0, $len - 1)];
}
} else {
for ($i = 0, $len = strlen($C[$mode]); $i < $l; $i++) {
$str .= $C[$mode][mt_rand(0, $len - 1)];
}
}
return $str;
}
function my_dump($var, $echo = true, $label = null, $strict = true)
{
$label = ($label === null) ? '' : rtrim($label) . ' ';
if (!$strict) {
if (ini_get('html_errors')) {
$output = print_r($var, true);
$output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
} else {
$output = $label . print_r($var, true);
}
} else {
ob_start();
var_dump($var);
$output = ob_get_clean();
if (!extension_loaded('xdebug')) {
$output = preg_replace('/\]\=\>\n(\s+)/', '] => ', $output);
$output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
}
}
if ($echo) {
echo($output);
return null;
} else
return $output;
}
/**
* 递归浏览目录
* @param array $arr
* @param string $dir 相对路径和以‘/’开头的路径,路径里尽量不要包含 ‘../’
* @param string $root_dir 根目录,绝对路径,可以忽略
* @param boolean $previous_dir $dir里路径是否允许包含‘../’
* @return array|bool
*/
function dir_read(&$arr = array(), $dir = '', $root_dir = '', $previous_dir = false)
{
if (y_string($dir)) {
$is_relative = strpos($dir, '/') === 0; //以‘/’开头的路径
$no_absolute = preg_match("/^(?!([A-Za-z]{1,3}\:))/i", $dir); //不是绝对路径(window系统下)
if (y_string($root_dir) && ($root_dir = realpath($root_dir))) {
if ($is_relative) {
$dir = rtrim($root_dir, '\\/') . $dir;
} elseif ($no_absolute) {
$dir = rtrim($root_dir, '\\/') . "/$dir";
}
$self_dir = $root_dir;
} else {
if ($is_relative) {
if ($_SERVER['DOCUMENT_ROOT']) {
$dir = ($self_dir = rtrim($_SERVER['DOCUMENT_ROOT'], '\\/')) . $dir;
} else {
$dir = ($self_dir = getcwd()) . $dir;
}
} elseif ($no_absolute) {
$dir = ($self_dir = getcwd()) . "/$dir";
}
}
} else {
$self_dir = $dir = y_string($root_dir) ? $root_dir : getcwd();
}
$previous_dir || ($dir = str_replace(array('../', '..\\'), array('', ''), $dir)); //不允许路径包含‘../’
$dir = realpath($dir);
if ($dir) {
$dir = rtrim(preg_replace("/[\/\\\\]{1,}/", "/", $dir), '/') . '/';
$self_dir = rtrim(preg_replace("/[\/\\\\]{1,}/", "/", $self_dir), '/'); //相对目录的根目录
$_dir = rtrim(str_replace($self_dir, '/', $dir), '/') . '/'; //以‘/’开头的相对路径
$dir_handle = opendir($dir);
$preg = array("a" => "/[\/\\\\]{1,10}/i");
while (false !== $list = readdir($dir_handle)) {
if ($list == '.' || $list == '..') continue;
$file_path = preg_replace($preg['a'], "/", $dir . $list, -1);
$relative_path = preg_replace($preg['a'], '/', $_dir . $list, -1);
if (is_file($file_path)) {
$arr['file'][] = array(
/*绝对路径(完整的文件路径)*/
"path" => $file_path,
/*相对路径*/
"relative" => $relative_path,
/*文件名*/
"fileName" => $list,
/*文件创建或修改时间*/
"filectime" => filectime($file_path),
"fctime" => date("Y-m-d H:i:s", filectime($file_path)),
/*文件的上次访问时间*/
"fileatime" => fileatime($file_path),
"fatime" => date("Y-m-d H:i:s", fileatime($file_path)),
/*文件的内容上次被修改的时间*/
"filemtime" => filemtime($file_path),
"fmtime" => date("Y-m-d H:i:s", filemtime($file_path)),
/*文件的所有者*/
"fileowner" => fileowner($file_path),
/*文件的大小 byte(字节)*/
"filesize" => filesize($file_path),
);
}
//判断当前是否为目录
if (is_dir($file_path)) {
//是目录
$arr["dir"][] = array(
/*完整目录路径(决对路径)*/
"path" => $file_path,
/*相对路径*/
"relative" => $relative_path,
/*文件夹(目录)名称*/
"dirName" => $list,
);
dir_read($arr, $_dir . '/' . $list, $root_dir);
}
}
closedir($dir_handle);
return $arr;
} else {
return false;
}
}
/**
* 递归浏览目录
* @param string $dir
* @param string $root_dir
* @param bool $previous_dir
* @return array|bool
*/
function readDirs($dir = '', $root_dir = '', $previous_dir = false)
{
//static $arr = array();
return dir_read($arr, $dir, $root_dir, $previous_dir);
}
/**
* 自定义目录扫描
* @param string $path
* @return array|bool
*/
function my_scandir($path = '')
{
if (y_string($path) && ($path = realpath($path))) {
$list = scandir($path);
$path = rtrim(str_replace('\\', '/', $path), '/') . '/';
if (is_array($list)) {
$temp = array("file" => array(), "dir" => array());
foreach ($list as $val) {
if ($val != "." && $val != "..") {
$link = $path . $val;
$od = array(
'path' => $link, 'fileowner' => fileowner($link), 'filesize' => filesize($link), 'filectime' => date('Y-m-d H:i:s', filectime($link)),
'fileatime' => date('Y-m-d H:i:s', fileatime($link)), 'filemtime' => date('Y-m-d H:i:s', filemtime($link)),
);
if (is_dir($link)) {
unset($od['fileowner'],$od['filesize']);
$temp['dir'][] = array_merge(array('dirName' => $val), $od);
}
if (is_file($link)) {
$temp['file'][] = array_merge(array('fileName' => $val), $od);
}
}
}
return $temp;
}
}
return false;
}
function var_look($var){
ob_start();
var_dump($var);
$str = ob_get_clean();
$str = preg_replace_callback("/(\]\=\>\n(\s+))/i",function($match) use ($str){
return "] => ";
},$str);
echo $str;
return $str;
}
function set_file_time($file_path='',$t=''){
$t = strval($t);
if(is_datetime($t)){
$t = strtotime($t);
}
if(preg_match("/^[0-9]{10}$/", strval($t))){
$Y = (int)date("Y",$t);
$m = (int)date("m",$t);
$d = (int)date("d",$t);
$H = (int)date("H",$t);
$i = (int)date("i",$t);
$s = (int)date("s",$t);
return touch($file_path,mktime($H,$i,$s,$m,$d,$Y),mktime($H,$i,$s,$m,$d,$Y));
}
return "错误!";
}
//$argv;
var_look($argv);
$self_dir_path = dirname(__FILE__);
if ($argv[1] == "modify_file_time_list") {
$file_name = $argv[2] ?: "";
$path = rtrim($self_dir_path, '/\\') . '/' . ltrim($file_name, '/\\');
$t = $argv[3] ?: "2019-05-10 10:30:00";
$list = my_scandir($path);
//var_look($list['file']);
foreach ($list['file'] as $k => $v) {
$ok[] = set_file_time($v['path'], $t) ? "文件:[{$v['path']}]修改时间成功" : "文件:[{$v['path']}] 修改时间失败!";
}
foreach ($list['dir'] as $k => $v) {
$ok[] = set_file_time($v['path'], $t) ? "文件夹:[{$v['path']}]修改时间成功" : "文件夹:[{$v['path']}] 修改时间失败!";
}
var_look($ok);
} elseif ($argv[1] == "modify_file_time") {
$file_name = $argv[2] ?: "";
$path = rtrim($self_dir_path, '/\\') . '/' . ltrim($file_name, '/\\');
$t = $argv[3] ?: "2019-05-10 10:30:00";
$ok = set_file_time($path, $t) ? "文件或文件夹:[{$path}]修改时间成功" : "文件或文件夹:[{$path}] 修改时间失败!";
var_look($ok);
} elseif ($argv[1] == 'modify_file_time_dir') {
$dir = $argv[2];
$root_dir = $argv[3];
$t = $argv[4] ?: "2019-05-10 09:30:00";
$list = readdirs($dir, $root_dir);
foreach ($list['file'] as $k => $v) {
$ok[] = set_file_time($v['path'], $t) ? "文件:[{$v['path']}]修改时间成功" : "文件:[{$v['path']}] 修改时间失败!";
}
foreach ($list['dir'] as $k => $v) {
$ok[] = set_file_time($v['path'], $t) ? "文件夹:[{$v['path']}]修改时间成功" : "文件夹:[{$v['path']}] 修改时间失败!";
}
var_look($ok);
}
?>
modify_file_time.bat 文件代码:
chcp 65001
echo off
@echo 当前盘符:%~d0
@echo 当前盘符和路径:%~dp0
@echo bat文件路径: %~f0
@echo 当前盘符和路径的短文件名格式:%~sdp0
@echo 当前CMD默认目录:%cd%
set dp0=%~dp0
set hx=————————————————————————————————————————
@echo %hx%
@echo 修改某个文件或文件夹时间
@echo %hx%
set /p file_name="输入file_name:"
set /p ctime="输入修改时间:"
php "%dp0%mft.php" "modify_file_time" "%file_name%" "%ctime%"
pause
modify_file_time_list.bat 文件代码:
chcp 65001
echo off
@echo 当前盘符:%~d0
@echo 当前盘符和路径:%~dp0
@echo bat文件路径: %~f0
@echo 当前盘符和路径的短文件名格式:%~sdp0
@echo 当前CMD默认目录:%cd%
set dp0=%~dp0
set hx=————————————————————————————————————————
@echo %hx%
@echo 修改某个文件夹下的当前层的文件和文件夹的时间
@echo %hx%
set /p file_name="输入file_name:"
set /p ctime="输入修改时间:"
php "%dp0%mft.php" "modify_file_time_list" "%file_name%" "%ctime%"
pause
modify_file_time_dir.cmd 文件代码:
chcp 65001
echo off
@echo 当前盘符:%~d0
@echo 当前盘符和路径:%~dp0
@echo bat文件路径: %~f0
@echo 当前盘符和路径的短文件名格式:%~sdp0
@echo 当前CMD默认目录:%cd%
set dp0=%~dp0
set hx=——————————————————————————————————————————
@echo %hx%
@echo 修改某个文件夹下的所有文件和所有文件夹的时间
@echo %hx%
set /p dir="输入dir:"
set /p root_dir="输入root_dir:"
set /p ctime="输入修改时间:"
php "%dp0%mft.php" "modify_file_time_dir" "%dir%" "%root_dir%" "%ctime%"
pause
使用如图: