#!/usr/bin/php
<?
chdir(dirname(__FILE__));
require_once('../nmail/include/global.php');


// 웹상에서의 실행방지.
if ($_SERVER['DOCUMENT_ROOT'] || $_SERVER['SERVER_SOFTWARE'])
{
	die("Access Denied");
}	// if()


// set
set_time_limit(0);


// check
if ($G_SYS[DB] == 'oracle')
{
	die("[Nmail]Oracle DB의 테이블최적화는 지원되지 않습니다.\n");
}	// if()

// db dump restore
	echo "[Nmail]MySQL DB의 테이블최적화 작업을 시작합니다.\n\n  주의)\n  서버사양이나 DB의 크기에 따라 많은 시간이 소요될 수 도 있습니다.\n  테이블최적화 작업도중 중단할 경우 예기치 못한 문제가 발생할 수 있으니 중단하지 말고 기다려 주십시오.\n\n";

	$time_start = getmicrotime();

	// db table check
	$q = "SHOW TABLES";
	$_tabs = db_get_rows($q, true);
	$_each = each($_tabs);
	$tabs = $_each['value'];
	$cnt = 0;
	for ($i=0; $i<sizeof($tabs); $i++)
	{
		$q = "SHOW TABLE STATUS LIKE '".$tabs[$i]."'";
		echo "  ".$q." ... ";
		flush();
		$row = db_get_row($q);
		if ($row['data_free'] > 0)
		{
			echo "[OverHead ".filesize_human($row['data_free'])."]";
		}	// if()
		echo "(".round(getmicrotime() - $time_start,4) . "sec)\n";

//Data_free
		if ($row['data_free'] > 0)
		{
			// [2012-11-12] 예외처리 추가
			$q = "OPTIMIZE TABLE `".$tabs[$i]."`";
			echo "  ".$q." ... ";
			flush();
			$rows = db_get_rows($q, true);
			$_as = array_search('status', $rows['msg_type']);
			$_is_ok = false;
			if ($_as !== false)
			{
				if ($rows['msg_text'][$_as] == 'OK')
				{
					echo "[".$rows['msg_text'][$_as]."] (".round(getmicrotime() - $time_start,4) . "sec)\n";
					$_is_ok = true;
				}	// if()
			}	// if()
			if ($_is_ok === false)
			{
				echo "\n";
				foreach ($rows['msg_text'] as $key=>$val)
				{
					echo "[DB error] ".$val."\n";
				}	// foreach()
				die("알 수 없는 원인으로 테이블최적화가 실패하였습니다.\n화면상에 보여진 에러메세지와 함께 문의주시기 바랍니다.\n");
			}	// if()

			$cnt++;
		}	// if()
	}	// for()

	if ($cnt > 0)
	{
		echo "\n[".$cnt."]개의 테이블최적화가 완료되었습니다. ( " . round(getmicrotime() - $time_start,4) . "sec )\n";
	} else
	{
		echo "\n테이블최적화가 필요한 테이블이 없습니다. ( " . round(getmicrotime() - $time_start,4) . "sec )\n";
	}	// if()


?>