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
相关文档:
最近在写一个 前台基于 javascript. 的客户端 服务器端PHP 的分析系统。
原先计划使用XML为数据交互基础 但是最终还是选用较轻量级的JSON最为数据交互基础。
首先介绍json的格式
json 说简单其实是一种数据格式 更简单的可以看做简单的数组。
实例 (一)
<script>
var jsonArray=[
......
PHP取得成功的一个主要原因之一是她拥有大量的可用扩展。web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到。PHP发行包包括支持各种数据库,图形文件格式,压缩,XML技术扩展在内的许多扩展。
扩展API的引入使PHP取得了巨大的进展,扩展API机制使PHP开发社区很容易的开发出几十种扩展。。扩展主要的思想是 ......
设置数据库连接
<?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)的使用连接设置
......
Java中的startsWith和endsWith方法,在filter的功能实现中很方便,PHP可以用strncmp()
实现startsWith,但是无法实现endsWith,有些人会用正则来实现,但大多数人都不喜欢正则表达式的操作。
这里我通过一个叫substr_compare的方法实现(同时他也能实现sta ......
我在上一篇文章中讲到使用javascript做集成表单验证的方法,对于客户端验证已经足够,但好的表单验证应同时在客户端和服务器端进行——这正是写本文的目的。
如果采用一般的验证方法应该怎样写呢?
if ($_POST['some'] 不满足 condition) {
& ......