windows下,使用php修改文件修改日期(包括文件夹)

方文锋  2024-03-08 16:20:31  610  首页学习PHP

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 

使用如图: