PHP经常使用工具函数

删除目录及目录下的全部文件

// 方法一,使用shell命令删除。
    function delDir($dir) {

    	// 把目录转换为绝对路径
    	$dir = realpath($dir);
    	if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
    		$str = 'rmdir /s/q ' . $dir;
    	} else {
    		$str = 'rm -Rf ' . $dir;
    	}
    
    	// 执行系统命令
    	exec($str);
    
    	if (is_dir($dir)) {
    		return false;
    	}
    
    	return true;
    }
    
    // 方法二,使用遍历目录的方法递归删除
  function delDir2($dir) {

    	if (empty($dir)) {
    
    		return false;
    	}
    
    	$dir = realpath($dir);
    	if (rmdir($dir) == false && is_dir($dir)) {
    		// 打开目录资源
    		if ($dh = opendir($dir)) {
    			while ($file = readdir($dh)) {
    
    				if ($file == '.' || $file == '..') {
    					continue;
    				}
    
    				// 得到文件或目录的路径
    				$file = $dir . '/' . $file;
    				if (is_dir($file)) {
    					delDir2($file);
    				} else if (is_file($file)) {
    					@unlink($file); // 删除目录里的文件
    				}
    			}
    			// 关闭目录资源
    			closedir($dh);
    			rmdir($dir);
    
    			if (is_dir($dir)) {
    
    				return false;
    			}
    
    			return true;
    		} else {
    
    			return false;
    		}
    	}
    }

IP范围查询

function ip_in_range( $ip, $range ) {
    if ( strpos( $range, '/' ) == false ) {
        $range .= '/32';
    }
    // $range is in IP/CIDR format eg 127.0.0.1/24
    list( $range, $netmask ) = explode( '/', $range, 2 );
    $range_decimal = ip2long( $range );
    $ip_decimal = ip2long( $ip );
    $wildcard_decimal = pow( 2, ( 32 - $netmask ) ) - 1;
    $netmask_decimal = ~ $wildcard_decimal;
    return ( ( $ip_decimal & $netmask_decimal ) == ( $range_decimal & $netmask_decimal ) );
}

调用以下:返回true 或 false
ip_in_range('121.42.125.255', '121.43.117.175/16')

计算IP网段的开始IP和结束IP

function mask2bin($n) {
    $n = intval($n);
    if ($n < 0 || $n > 32) {
        die('error submask');
    }

    return str_repeat("1", $n) . str_repeat("0", 32 - $n);
}

function revBin($s) {
    $p = array('0', '1', '2');
    $r = array('2', '0', '1');
    return str_replace($p, $r, $s);
}

function execIp($str) {
    list($ip, $m) = explode("/", $str);
    $bIp          = decbin(ip2long($ip));
    // 不足32位,前面补0
    $bIp          = str_pad($bIp, 32, 0, STR_PAD_LEFT);
    $bSub         = mask2bin($m);
    $sip          = bindec($bIp & $bSub);
    $eip          = bindec($bIp | revBin($bSub));

    return [
        'network'   => long2ip($sip), // 网络地址
        'broadcast' => long2ip($eip), // 广播地址
        'sip'       => long2ip($sip + 1), // 可用最小ip
        'eip'       => long2ip($eip - 1), // 可用最大ip
    ];
}

$str = "192.168.1.5/20";
$a   = execIp($str);