불

XML 로드 클래스

· 2011-05-17 (화) 21:21:27 · 2692 · 1
XML 클래스 입니다..
아니 이게 왜 필요하냐?

그딴 이유 없음;

php5에서만 동작합니다.
사용 설명은 주석에~

최소한에 new 연산자 아는분만 쓰셈.~
<?
class xmlLoad {
/*
* 작성자 : 다프린(불바람)
* 공짜인데 이름 지우면 죽여불라~
*
*
* 사용법:
* 1번 방법
* $this->{'data'} = "<data><title></title></data>";
* 위에 처럼하면 data로 호출시 위에 데이터가 들은 DOM객체를 셋팅되고 data로 부르면 된다.
*
* 2번 방법
* $this->{'http://babo.net/나XML.xml'};
* 위에 처럼하면 http://babo.net/wow.xml로 호출시 해당 xml의 데이터가 들은 DOM객체를 반환
* 3번방법
* $this->{'wow2.xml'} = "<data><title></title></data>";
* XML 확장자를 가진 이름이면 파일이 없으면 해당 자료를을 넣은 데이터 DOM이 세팅된고 마지막 작업때 자공 저장된다.
* 해당 파일이 있으면 wow2.xml를 불러온다.
*
* !!!!이미 있는 파일 변조하고 다시 저장시.
* $this->{'나XML.xml'} = $this->{'나XML.xml'}->firstChild->ownerDocument;
*
* 이렇게 다시 Document를 넣으면 종료 될때 자동 저장된다.
* 주의:: 같은 DOM객체여야 한다. 서로 틀린 DOM 경우 전혀 안된다. 프로토콜로 시작하는 이름은 에러가 걸리니 주의 해라.
*
* 이하 메소드 설명 귀찮아서 안함.
*/

private $version='1.0', $encoding='utf-8';
private static $node = array(), $stand_by_save = array();

private $extension = array('xml', 'xsl');

public function __construct(){
}

final private function findType($key){
if(strpos($key, "http://") === 0 or strpos($key, "https://") === 0 or strpos($key, "ftp://") === 0) return 'url';
else{
$ex = end(explode(".", strtolower($key)));
return array_search($ex, $this->extension) !== false?'localhost':'normal';
}
}

final public function __get($key){
if($this->isKey($key)) return $this->loadKey($key);
else{
$type = $this->findType($key);
switch ($type) {
case 'localhost':
if(!file_exists($key)) return false;
case 'url':
$dom = $this->load($key, $this->version, $this->encoding, $type);
$this->saveKey($key, $dom);
return $dom;
break;
}
}
return false;
}

final public function __set($key, $val){
if(!$this->isKey($key)){
if(get_class($var) == 'DOMDocument') {
$dom = $this->loadKey($key);
if($dom->check_code == $val->check_code) $this->stand_by_save($key);
return $dom;
}
else{
$type = $this->findType($key);
switch ($type) {
case 'normal':
$dom = $this->load($val, $this->version, $this->encoding, $type);
$this->saveKey($key, $dom);
return $dom;
break;
case 'localhost':
if(!file_exists($key)){
$dom = $this->load($val, $this->version, $this->encoding, $type);
$this->saveKey($key, $dom);
$this->stand_by_save($key);
return $dom;
}
break;
}
}
}
}

public function __isset($name) {
return isset(self::$node[$name]);
}

public function __unset($name) {
unset(self::$node[$name]);
}

final private function saveKey($key, $dom){
if(!self::$node[$key]){
$dom->check_code = count(self::$node);
self::$node[$key] = $dom;
return true;
}
return false;
}

final private function loadKey($key){
if(self::$node[$key]) return self::$node[$key];
return false;
}

final private function isKey($key){
if(self::$node[$key]) return true;
return false;
}

final protected function load($val='', $version='1.0', $encoding='utf-8', $type=''){
if(_debug_) $xmlLoadTime = microtime_float();
$dom = new DOMDocument($version, $encoding);
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
if($type == '') $type = $this->findType($val);
if($val != ''){
switch ($type) {
case 'normal':
$dom->loadxml("<?xml version=\"".$version."\" encoding=\"".$encoding."\" ?>".$val);
break;

case 'url':
case 'localhost':
$dom->load($val);
break;
}
}
$dom->type = $type;
if(_debug_) $GLOBALS["xmlLoadTime"] += bcsub(microtime_float(), $xmlLoadTime, 4);
return $dom;
}

final protected function save(DOMDocument $dom, $fileName){
switch ($dom->type) {
case 'localhost':
case 'normal':
$dom->save($fileName);
break;
}
}

final public function stand_by_save($key, $fileName=''){
if($this->isKey($key)){
switch ($this->loadKey($key)->type) {
case 'localhost':
self::$stand_by_save[$key] = $key;
return true;
break;
case 'normal':
self::$stand_by_save[$key] = $fileName;
return true;
break;
}
}
return false;
}

final public function __destruct(){
foreach(self::$stand_by_save as $key => $val) $this->save($this->loadKey($key), $val);
}
}<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:16:08 PHP & HTML에서 이동 됨]</div>
|

댓글 1개

2011-06-21 (화) 11:38:36
써보고 답글 다시 적을께요.~
좋은 팁 감사합니다
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
12-03-19 조회 3,492
12-03-16 조회 4,042
12-03-14 조회 3,922
12-03-13 조회 3,540
12-03-13 조회 4,405
12-03-12 조회 5,473
12-03-12 조회 1만
12-03-08 조회 6,033
12-03-06 조회 1.1만
12-03-06 조회 3,724
12-03-06 조회 6,255
12-03-02 조회 5,021
12-02-29 조회 3,594
12-02-27 조회 4,083
12-02-22 조회 3,643
12-02-20 조회 3,624
12-02-20 조회 6,726
12-02-01 조회 3,237
12-01-30 조회 8,768
12-01-29 조회 3,260
12-01-24 조회 3,571
12-01-21 조회 3,229
12-01-10 조회 3,704
11-12-26 조회 3,602
11-12-23 조회 5,021
11-12-23 조회 4,678
11-12-23 조회 4,307
11-12-23 조회 8,003
11-12-22 조회 3,725
11-12-17 조회 3,758
11-12-12 조회 3,173
11-12-08 조회 7,714
11-12-08 조회 3,562
11-12-07 조회 3,800
11-12-06 조회 5,565
11-12-02 조회 3,517
11-12-01 조회 3,125
11-11-30 조회 6,928
11-11-26 조회 3,864
11-11-24 조회 4,646
11-11-22 조회 3,019
11-11-22 조회 6,642
11-11-18 조회 5,060
11-11-16 조회 3,447
11-11-14 조회 3,465
11-11-12 조회 3,957
11-11-08 조회 3,284
11-11-06 조회 1만
11-11-06 조회 3,859
11-11-03 조회 5,549
11-11-02 조회 5,821
11-11-01 조회 9,330
11-10-19 조회 2,829
11-10-17 조회 2,624
11-10-10 조회 2,571
11-10-07 조회 3,364
11-10-06 조회 3,960
11-10-06 조회 2,508
11-10-02 조회 3,260
11-09-08 조회 4,267
11-09-08 조회 2,642
11-09-07 조회 2,631
11-09-02 조회 2,711
11-09-01 조회 3,653
11-08-28 조회 3,541
11-08-23 조회 3,390
11-08-22 조회 2,797
11-08-22 조회 2,393
11-08-13 조회 2,443
11-08-05 조회 2,894
11-08-03 조회 4,098
11-07-03 조회 2,592
11-06-15 조회 3,233
11-06-15 조회 3,059
11-05-15 조회 2,874
11-05-11 조회 5,596
11-04-12 조회 3,003
11-01-27 조회 3,831
11-01-26 조회 2,631
11-01-26 조회 4,474
11-01-18 조회 2,688
10-11-23 조회 2,926
10-10-24 조회 4,739
10-09-15 조회 4,427
10-09-07 조회 3,399
10-08-27 조회 4,087
10-08-20 조회 6,975
10-07-30 조회 5,651
10-06-30 조회 2,889
10-06-11 조회 4,650
10-06-11 조회 3,341
10-05-15 조회 4,181
10-05-10 조회 2,861
10-03-19 조회 5,424
10-03-05 조회 5,189
10-02-17 조회 5,601
09-11-21 조회 6,934
09-11-09 조회 4,004
09-11-04 조회 6,735
09-10-26 조회 3,859