mangos.ru
дата:18 июля 2009 г.
автор:Feuer
По просьбам трудящихся Пример парсинга UpdateFields.h, экспорт данных о полях в ini файл и работа с ним.
PHP код:
<?php
/**
* UpdateFields.php :: Parse UpdateFields.h
*
* @author Dibosh
*/
class UpdateFields {
static public function update(){
$file = file_get_contents(UPDATE.'UpdateFields.h') or die();
$file = preg_replace('/(\/.*\n)|\t|\s|\n/Uis','',$file);
#enumEObjectFields{ =>
preg_match_all('/enumE(.*?)\;/i',$file,$Fields);
# => ObjectFields
foreach($Fields***91;1***93; as $field){
preg_match('/^(.*){/i',$field,$name);
$name = $name***91;1***93;;
preg_match('/{(.*?),}/i',$field,$field);
$field = split(',', $field***91;1***93;);
foreach($field as $f){
preg_match('/^(.*?)=.*(0x.{4})/i',$f,$s);
$F_array***91;$name***93;***91;$s***91;1***93;***93; = hexdec($s***91;2***93;);
}
}
INI::save(CONFIG.'DataFields', $F_array);
}
}
?>
PHP код:
<?php
/**
* ini.php :: Класс для работы с .ini файлами конфигурации
*
* @author Dibosh
*/
class INI {
public static function save($fname,$array){
$f_ini = fopen($fname.'.ini','w') or die("can't open");
foreach($array as $part_key => $part_cont){
fwrite ($f_ini,"***91;".$part_key."***93;\n") or die();
foreach($part_cont as $key => $value){
fwrite ($f_ini,$key."=".$value."\n") or die();
}
}
fclose($f_ini) or die();
}
public static function load($fname){
return parse_ini_file($fname.'.ini',1);
}
}
?>
PHP код:
<?php
/**
* index.php
*
* @author Dibosh
*/
define(UPDATE,"./update/");
define(CONFIG,"./config/");
include('UpdateFields.php');
include('ini.php');
UpdateFields::Update();
$F_array = INI::load(CONFIG.'DataFields');
print "<ul>";
foreach($F_array as $part => $items){
print "<li>".$part."</li>";
print "<ul>";
foreach($items as $key => $num){
print "<li>".$key." = ".$num."</li>";
}
print "</ul>";
}
print "</ul>";
# пример использования
print $F_array***91;'ItemFields'***93;***91;'ITEM_FIELD_CREATOR'***93;;
# узнаем позицию для ITEM_FIELD_CREATOR
//дальнейший код не тестировался
$db = new PDO('#параметры');
$st = $db->prepare("UPDATE `table` SET `data`=CONCAT(CAST(SUBSTRING_INDEX(`data`, ' ', ?) AS CHAR), ' ', ?, ' ',
CAST(SUBSTRING_INDEX(`data`, ' ', -(? - ?))AS CHAR)) WHERE `guid` = ?");
$part = 'ItemFields';
$key = 'ITEM_FIELD_CREATOR';
$value = '777';
$guid = '10';
$st->execute(array($F_array***91;$part***93;***91;$key***93;,$value,count($F_array***91;$part***93;),$F_array***91;$part***93;***91;$key***93;),$guid);
?>