删除目录及目录下的全部文件
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);