PHP常用工具函数

这篇博客介绍了PHP中的一些常用工具函数,包括如何删除目录及其内容,进行IP范围查询,以及计算IP网段的起始和结束IP地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

删除目录及目录下的所有文件

    
    // 方法一,使用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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值