近日,有同事说有个 5百万 的白名单处理, 到网上查找 相似案例, 说是有个bitmap的解法,
再次 google ,baidu 无相关 PHP 的解法, 于是自己写了一个:
<?php
/* 5百万 uid 白名单 之 PHP Bitmap 处理
* author: hushuilong
* email: hushuilong at gmail dot com
* */
class Bitmap
{
private $handler = NULL;
private $max = 0;
public function __construct($file)
{
clearstatcache(true, $file);
if(file_exists($file))
$this->handler = @fopen($file , 'r+') OR die('open bitmap file failed');
else
$this->handler = @fopen($file , 'w+') OR die('open bitmap file failed');
$this->max = file_exists($file) ? (filesize($file) * 8 - 1) : 0;
}
public function __destruct()
{
@fclose($this->handler);
}
private function binary_dump($binary_data)
{
return sprintf('%08d',decbin(hexdec(bin2hex($binary_data))));
}
private function num_check($num)
{
($num > -1) OR die('number must be greater than -1');
($num < 4294967296) or die('number must be less than 4294967296'); // 2^32
if ($this->max < $num) {
fseek($this->handler, 0, SEEK_END);
fwrite($this->handler , str_repeat("\x00",ceil(($num - $this->max)/8))); // fill with 0
$this->max = ceil($num/8)*8 - 1;
}
}
public function set($num)
{
$this->num_check($num);
fseek($this->handler, floor($num/8), SEEK_SET);
$bin = fread($this->handler, 1) | pack('C',0x100 >> fmod($num,8)+1); // mark with 1
fseek($this->handler, ftell($this->handler)-1, SEEK_SET); // write a new byte
fwrite($this->handler, $bin);
fflush($this->handler);
}
public function del($num)
{
$this->num_check($num);
fseek($this->handler, floor($num/8), SEEK_SET);
$bin = fread($this->handler, 1) & ~pack('C',0x100 >> fmod($num,8)+1); // mark with 0
fseek($this->handler, ftell($this->handler)-1, SEEK_SET); // write a new byte
fwrite($this->handler, $bin);
fflush($this->handler);
}
public function find($num)
{
if (fseek($this->handler, floor($num/8), SEEK_SET) == -1) return FALSE;
$bin = fread($this->handler , 1);
if ($bin === FALSE || strlen($bin) == 0) return FALSE;
$bin = $bin & pack('C',0x100 >> fmod($num,8)+1);
if($bin === "\x00") return FALSE;
return TRUE;
}
}
$b = new Bitmap('/dev/shm/bitmapdata');
// 设置白名单
$b->set(1); $b->set(3); $b->set(5);
$b->set(7); $b->set(9); $b->set(501);
$uid = 501;
var_dump($b->find($uid)); // 查找白名单
$b->del($uid); // 删除白名单
var_dump($b->find($uid)); // 查找白名单
其中 “$b = new Bitmap('/dev/shm/bitmapdata');” 把文件,放在内存里,增加读写速度
执行结果如下:
hu@xunleiman-desktop:~/web/test/shm$ /bin/sh ./geany_run_script.sh
bool(true)
bool(false)
生成的bitmapdata文件 在附件里面:
- 大小: 112.7 KB
分享到:
相关推荐
在Android开发中,为了提升用户体验,我们经常需要对图片进行特殊处理,比如将矩形的Bitmap转换为圆角效果。这种需求在用户头像显示、卡片设计等场景中尤为常见。"把bitmap处理成圆角"是Android UI设计中一个重要的...
在Android开发中,处理`Bitmap`内存溢出问题是一个常见的挑战,尤其是在处理高分辨率或大尺寸图片时。当应用程序尝试加载或操作一张超出虚拟机内存预算的`Bitmap`时,系统会抛出`java.lang.OutOfMemoryError: bitmap...
在Android开发中,Bitmap是用于表示图像数据的核心类,它在UI显示和图像处理中扮演着重要角色。然而,由于Bitmap对象通常占用大量的内存,不当的处理可能导致内存溢出(Out Of Memory)问题,因此对Bitmap进行高效...
Bitmap处理在IT行业中,特别是在移动应用开发,尤其是Android平台,是一项关键技能。Bitmap是Android系统中用于存储像素数据的数据结构,常用来显示图像。这里,我们深入探讨Bitmap处理的知识点。 1. **Bitmap基本...
在Android开发中,Bitmap是用于表示图像数据的基本类,它在UI设计和图像处理中扮演着重要角色。本文将深入探讨如何使用Bitmap实现各种特效处理,包括黑白特效、底片特效、浮雕特效、模糊特效、锐化特效以及怀旧特效...
在Android开发中,Bitmap是用于图像处理的基本对象,它存储并表示了图像的数据。而Matrix则是Android图形系统中的一个关键类,它允许我们对图像进行各种变换操作,如旋转、缩放、平移和倾斜等。这个教程将深入探讨...
在Android开发中,Bitmap对象是用于处理图像的主要类,但如果不妥善管理,它可能会引发“Out Of Memory”(OOM)错误。这是因为Android设备的内存有限,尤其是对于大型图像,加载到内存中会消耗大量资源。当应用无法...
5. 最后,使用Canvas的drawBitmap方法,传入旋转后的Bitmap和旋转中心点,将其绘制到圆形Bitmap上。 这个过程中,关键在于正确地设置BitmapShader和PorterDuff.Mode,以及合理地使用Matrix进行旋转操作。如果要处理...
在Android开发中,Bitmap是处理图像数据的基本类,它用于表示位图图像。"bitmap上传图片demo"是一个示例项目,展示了如何利用Bitmap处理本地图片并进行上传,同时提供了将图片裁剪为圆形以适合作为头像的功能。在这...
"Bitmap图片处理工具类" 提供了多种对位图(Bitmap)进行操作的功能,如颜色转换、图像分割、缩放、旋转、调整透明度、生成圆角图片以及文字与倒影效果的绘制。接下来,我们将深入探讨这些知识点。 首先,`...
在进行机器视觉项目时,有时我们需要将Bitmap图像转换为Halcon能识别的图像类型,即HObject,以便在Halcon中进行后续的图像分析和处理。下面我们将详细讲解如何实现这个转换过程,并探讨相关的IT知识点。 首先,让...
在Android开发中,Bitmap是用于表示图像数据的基本类,它在UI设计和图像处理中扮演着核心角色。BitmapFun.zip包含了一系列关于Android Bitmap处理的例子,主要聚焦于如何有效地管理大图片以及实现图片缓存机制。这里...
在C#.NET编程环境中,`Bitmap`类是用于处理图像的核心类,它允许开发者创建、加载、修改和显示位图图像。本篇文章将详细介绍`Bitmap`类的基本使用方法,包括其构造函数、属性、方法以及如何与其他图形组件交互。 1....
在Android应用开发中,Bitmap是用于处理图像的基本类,它代表了一个位图图像。位图渲染与操作是Android图形处理的重要部分,对于优化性能、创建动态效果和自定义UI至关重要。以下将详细讨论Bitmap的使用、渲染过程...
5. **效率优化**:在处理大型Bitmap时,为了提高效率,可以使用多线程或者异步处理来分块复制,减少一次性拷贝大量数据带来的性能开销。 在实际编程中,可以使用各种编程语言来操作Bitmap,如C++、C#、Java等,都有...
用于制作模糊的图片,多用于背景模糊效果,bitmap Bitmap 需要模糊的图像,context Context 上下文对象
在Android开发中,Bitmap是处理图像的基本类,用于在内存中表示位图图像。当我们需要对图片进行裁剪、缩放或进行其他操作时,Bitmap提供了丰富的功能。本篇文章将详细探讨如何在Android环境下利用Bitmap来切割图片。...
Bitmap位图是Android系统中广泛使用的...总之,“Bitmap位图旋转范例”是一个很好的学习资源,通过研究这个工程,开发者可以掌握如何在Android中有效地处理Bitmap的旋转,同时了解与之相关的内存管理和性能优化技巧。
C#中的Bitmap类和Graphics类是两种常用的图形处理类,它们之间存在一定的差异和联系。在本节中,我们将详细介绍Bitmap类和Graphics类的概念、方法和应用场景。 一、Bitmap类 Bitmap类是C#中用于图像处理的基本类,...
在Android开发中,Activity之间的数据传递是常见的操作,特别是在处理图像数据时,如Bitmap对象。Bitmap是Android系统中用于表示图像的重要类,它包含了图像的所有像素信息。在不同Activity之间传递Bitmap,通常是...