php 读取 魔兽DBC文件
话说头疼了N天的问题,今天终于解决了。
要做Mangos的管理软件,Copy多玩魔兽数据库做了个相同功能的程序,但是开发中发现并不是全部的信息都体现在数据库里。
唯一的解决方法就是去读取dbc文件。
最开始想到的就是使用类似读取ip库的方法。但是问题很明显,不同的库文件存放的头文件长度不同,只能一点一点的试或是在网上找资料。
折腾了一天终于啊...
文件存放规则其实很简单,头长度为20,每4个字节为一个单位,标志者 标题,数据条数,每个字段长度,每行数据字段数,每个字符长度
也就是说正文的开始是从第21个开始,然后只要计算出没行数据的偏移量就可以了。
下面这个类就是完整的实现了dbc的读取和查询功能。
写这个类采用了几个小时,还有很多不完善的地方,而且页面有进行真正意义上的缓存。
之后会更好的完善这个功能类。
顺便提一句,网上那些胡乱回答的家伙去死吧,有的说wow的dbc 就是vfp的dbc数据库文件,有的说用odbc或adodb打开...
我倒是想去完善这些问题,可惜都已经过时限了。
<?php
/**
* WOW Dbc文件 读取核心类
*
* @package Eclair_Wow
* @version 1.0
*
* @desc -- 转载请标明出处 --
* @author Eclair.W wujian@myiee.com 95732081
*/
class Dbc
{
const HEADLENGTH = 20;
const HEADSIZE = 4;//头部每个标识的长度
protected $_enableCache = true;
protected $_fp;//文件资源
protected $head = array();
protected $pointer = 0;
protected $item_length;//每行的长度
protected $count; //数据的行数
protected $line_fileds;//每行的长度
protected $meter = 4;//每项的字符串长度
protected $dbc_file;
protected $_cache = array();
protected $_body_pos;//数据信息开始的位置
/**
* dbc 读取查询方法
*
* @param string dbc文件位置 $dbc_file
* @param array 每一项的名称 $head
*/
public function __construct($dbc_file,$head = array(),$enableCache = true)
{
ini_set('memory_limit','512m');
set_time_limit(0);
$this->dbc_file = $dbc_file;
$this->autoOpen();//打开文件资源
$this->readHead();
$this->head = $head;
$this->_enableCache = $enableCache;
}
public function __destruct()
{
fclose($this->_fp);
}
public function __ge
相关文档:
准备:
lighttpd-1.4.15.tar.gz
php-4.4.2.tar.gz
mysql-5.0.20a.tar.gz
开始:
1 编译安装lighttpd
# tar zxvf lighttpd-1.4.15.tar.gz
# cd lighttpd-1.4.15
# ls
# ./configure --prefix=/usr/local/lighttpd //此部无法编译时提示安装prce-devel
#&nbs ......
任务:根据输入的域名 统计以下三个数据,第一:全球排名;第二:用户量(月平均值);第三:
人均页面访问量(月平均值)。
思路:使用get_file_contents提取出网页内容,再根据正则表达式进行内容的筛选。
核心函数如下:
<?php
/*
the function of getting aleax data
@param string partten  ......
#
启动服务的用户和组
user
lighttpd lighttpd;
#
开多少进程
worker_processes
2;
#
错误日志
error_log
/data/log/nginx/nginx_error/nginx_error.log crit;
#
pid
pid
/var/run/nginx.pid;
#
Specifies
the value for maximum file descriptors t ......
php验证码显示红色叉叉
这个问题困扰我半天了。在本机上测试是正常的,环境是win2003+php+mssql.显示正常。
现在我把程序转移到新服务器上,验证码就不显示了,不知道是什么情况,我检测了服务器环境,gd是支持的,如下图:
但是,就是不显示,如有高手,请跟帖,谢谢了。 ......
Java中的startsWith和endsWith方法,在filter的功能实现中很方便,PHP可以用strncmp()
实现startsWith,但是无法实现endsWith,有些人会用正则来实现,但大多数人都不喜欢正则表达式的操作。
这里我通过一个叫substr_compare的方法实现(同时他也能实现sta ......