Server : Apache/2.4.58 (Ubuntu) System : Linux yumsem00.cafe24.com 5.4.0-131-generic #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 x86_64 User : root ( 0) PHP Version : 8.2.14 Disable Function : NONE Directory : /var/www/html/wp-content/plugins/kboard/class/ |
Upload File : |
<?php /** * KBoard 데이터 백업 및 복구 * @link www.cosmosfarm.com * @copyright Copyright 2021 Cosmosfarm. All rights reserved. * @license http://www.gnu.org/licenses/gpl.html */ class KBBackup { /** * KBoard 테이블 목록을 반환한다. * @return array */ public function getTables(){ global $wpdb; $tables = array(); $tables_result = $wpdb->get_results('SHOW TABLES', ARRAY_N); foreach($tables_result as $table){ if(strpos($table[0], "{$wpdb->prefix}kboard_") !== false) $tables[] = $table[0]; } return $tables; } /** * 테이블 sql 테이터를 생성한다. * @param string $table * @return string */ public function getSql($table){ global $wpdb; $result = $wpdb->get_results("SELECT * FROM `$table`", ARRAY_N); $sql = "TRUNCATE TABLE `$table`;\n"; foreach($result as $row){ $columns = count($row); $sql .= "INSERT INTO `$table` VALUE ("; for($i=0; $i<$columns; $i++){ if($row[$i]) $value[] = "'$row[$i]'"; else $value[] = "''"; } $value = implode(',', $value); $sql .= "$value);\n"; } return $sql; } /** * 테이블 xml 테이터를 생성한다. * @param string $table * @return string */ public function getXml($table){ global $wpdb; $result = $wpdb->get_results("SELECT * FROM `$table`", ARRAY_A); // 테이블 이름에서 PREFIX를 지운다. $table = str_replace($wpdb->prefix, '', $table); $xml = "<$table>\n"; foreach($result as $row){ $xml .= "\t<data>\n"; foreach($row as $key => $value){ $xml .= "\t\t<$key>"; $xml .= "<![CDATA[".stripslashes($value)."]]>"; $xml .= "</$key>\n"; } $xml .= "\t</data>\n"; } $xml .= "</$table>\n"; return $xml; } /** * 데이터 파일을 다운로드 받는다. * @param string $data * @param string $file * @param string $filename */ public function download($data, $file='xml', $filename=''){ if(!$filename){ $ymd = date('Ymd', current_time('timestamp')); $filename = "KBoard-Backup-{$ymd}.{$file}"; } header("Content-Type: ".kboard_mime_type($filename)); header("Content-Disposition: attachment; filename=\"".$filename."\""); header("Pragma: no-cache"); Header("Expires: 0"); @ob_clean(); @flush(); if($file == 'xml'){ echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; echo "<kboard>\n"; echo $data; echo "</kboard>"; } else{ echo $data; } exit; } /** * XML 복원파일을 입력받아 기존 데이터를 비우고 DB에 입력한다. * @param string $file */ public function importXml($file){ global $wpdb; include 'XML2Array.class.php'; $xml = file_get_contents($file); $xml = trim($xml); $array = XML2Array::createArray($xml); foreach($array['kboard'] as $table=>$rows){ // 테이블에 입력될 데이터가 한 개인지 여러개 인지 확인한다. if(isset($rows['data']) && is_array($rows['data'])){ $keys = array_keys($rows['data']); if(reset($keys) == '0') $data = $rows['data']; else $data = $rows; } else{ $data = $rows; } if($data){ // 테이블 이름에 PREFIX를 추가 한다. $table = $wpdb->prefix.$table; // 새로 생성될 테이블을 비운다. $wpdb->query("TRUNCATE TABLE `$table`"); // 새로운 content를 입력하기 위해서 posts테이블에 입력된 content를 삭제한다. if(stristr($table, 'kboard_board_content')) $wpdb->query("DELETE FROM `{$wpdb->prefix}posts` WHERE `post_type`='kboard'"); foreach($data as $key=>$row){ $keys = array_keys($row); $row_count = count($row); $columns = array(); for($i=0; $i<$row_count; $i++){ $columns[] = "`$keys[$i]`"; } $columns = implode(',', $columns); $value = array(); for($i=0; $i<$row_count; $i++){ $value[] = "'".esc_sql($row[$keys[$i]]['@cdata'])."'"; } $value = implode(',', $value); $wpdb->query("INSERT INTO `$table` ($columns) VALUES ($value)"); /* * search 값이 있을경우 post 테이블에 내용을 입력한다. */ if(isset($row['search']) && ($row['search']['@cdata']==1 || $row['search']['@cdata']==2)){ if($wpdb->insert_id){ $kboard_post = array( 'post_author' => $row['member_uid']['@cdata'], 'post_title' => $row['title']['@cdata'], 'post_content' => ($row['secret']['@cdata']=='true' || $row['search']['@cdata']==2) ? '' : $row['content']['@cdata'], 'post_status' => 'publish', 'comment_status'=> 'closed', 'ping_status' => 'closed', 'post_name' => $wpdb->insert_id, 'post_parent' => $row['board_id']['@cdata'], 'post_type' => 'kboard' ); wp_insert_post($kboard_post, true); } } } // end foreach } } // end foreach } } ?>