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
相关文档:
因为只有iis6.0才带有web扩展。而iis6.0是默认安装在win2003的。winxp是不能安装iis6.0的。那我们就用iis5.1吧。
环境:WINXP+IIS5.1
开始之前请先确定你的IIS安装是否成功,能否通过http://localhost
来
访问
一、先到PHP官方网下载个php-5.2.5-Win32.zip
,点击这里链接到官
网下载地址
二、下载好之后,直接全部 ......
1、ereg里面是不需要也不能使用分隔符和修饰符的,所以ereg的功能比preg要弱上不少。
2、关于".":点在正则里面一般是除了换行符以外的全部字符,但是在ereg里面的"."是任意字符,即包括换行符!如果在preg里面希望"."
能够包括换行符,可以在修饰符中 ......
设置数据库连接
<?php
/**
* @author [斯人]
* @date 2010/6/1/10:16
* @
*
*/
define("RDFAPI_INCLUDE_DIR", "E:/siren/rdfapi-php/api/");
include(RDFAPI_INCLUDE_DIR . "RDFAPI.php");
//连接到MSAccess数据库(rdf_db DSN)的使用连接设置
......
/ ok
header('HTTP/1.1 200 OK');
//设置一个404头:
header('HTTP/1.1 404 Not Found');
//设置地址被永久的重定向
header('HTTP/1.1 301 Moved Permanently');
//转到一个新地址
header('Location: http://www.example.org/'
);
//文件延迟转向:
header('Refresh: 10; url=http://www.example.org/');
print 'Y ......