<?php
	if(isset($_POST['upload'])){
    //Список разрешенных файлов
    $whitelist = array(".xml");         
	$data = array();
	$error = true;
	
	//Проверяем разрешение файла
    foreach  ($whitelist as  $item) {
		if(preg_match("/$item\$/i",$_FILES['userfile']['name'])) $error = false;
    }

    //если нет ошибок, грузим файл
    if(!$error) { 
    	   	  
		$folder =  'upload/';//директория в которую будет загружен файл
		
		$uploadedFile =  $folder.basename($_FILES['userfile']['name']);
				
		if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
		
			if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadedFile)){
		
		        $data = $_FILES['userfile'];
			}
			else {	
				echo "<b>Во время загрузки файла произошла ошибка</b>";
			}
		}
		else {	
			echo "<b>Файл не  загружен</b>";
		}
    }
    else{
    	
		echo "<b>Вы загружаете запрещенный тип файла</b>";
    }
	
function libxml_display_error($error){
    $return = "<br/>\n";
    switch ($error->level) {
        case LIBXML_ERR_WARNING:
            $return .= "<b>ПРЕДУПРЕЖДЕНИЕ $error->code</b>: ";
            break;
        case LIBXML_ERR_ERROR:
            $return .= "<b>ОШИБКА $error->code</b>: ";
            break;
        case LIBXML_ERR_FATAL:
            $return .= "<b>ФАТАЛЬНАЯ ОШИБКА $error->code</b>: ";
            break;
    }
	$flag = 0;
	if($error->code == "1874"){
		$return .= "Элемент <b>'";
		$errmes = trim($error->message);
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> содержит атрибут <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>, имеющий значение <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= ",</b> которое не совпадает с фиксированным значением <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	
	if($error->code == "1871"){
		$errmes = trim($error->message);
		$pos = strpos($errmes, "Missing child element(s).");
		if($pos){
			$return .= "В элементе <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> не хватает дочернего(их) элемента(ов), ожидается(ются) элемент(ы) <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "(" && $errmes[$i + 1] == " ")
					break;
			}
			for($i = $i + 2;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i + 1] == " " && $errmes[$i + 2] == ")")
					break;
			}
			$return .= "'</b>.";
		}
		$pos = strpos($errmes, "This element is not expected.");
		if($pos){
			$pos = strpos($errmes, "This element is not expected. Expected");
			if($pos){
				$return .= "Элемент <b>'";
				for($i = 9;;$i++){
					$return .= $errmes[$i];
					if($errmes[$i] == "'")
						break;
				}
				$return .= "</b> находится в недопустимом месте, ожидается(ются) элемент(ы) <b>'";
				for($i = $i + 1;;$i++){
					if($errmes[$i] == "(" && $errmes[$i + 1] == " ")
						break;
				}
				for($i = $i + 2;;$i++){
					$return .= $errmes[$i];
					if($errmes[$i + 1] == " " && $errmes[$i + 2] == ")")
						break;
				}
				$return .= "'</b>.";
			}else{
				$return .= "Элемент <b>'";
				for($i = 9;;$i++){
					$return .= $errmes[$i];
					if($errmes[$i] == "'")
						break;
				}
				$return .= "</b> находится в недопустимом месте.";
			}
		}
		$flag = 1;
	}
	
	if($error->code == "1824"){
		$errmes = trim($error->message);
		$pos = strpos($errmes, ", attribute");
		if($pos){
			$return .= "В элементе <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> атрибут <b>'";
			for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет значение <b>'";
			for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b>, которое не соответствует его типу.";
		}else{
			$return .= "Элемент <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет значение <b>'";
			for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b>, которое не соответствует его типу.";
		}
		$flag = 1;
	}
	
	if($error->code == "1828"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> должен содержать внутри себя его значение, а найден другой элемент.";
		$flag = 1;
	}
	
	if($error->code == "1840"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> содержит значение, которое не входит в список допустимых, например: <b>";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "{")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i + 1] == "}")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	if($error->code == "1831"){
		$errmes = trim($error->message);
		if(strpos($errmes, ", attribute")){
			$return .= "Элемент <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет атрибут <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> со значением <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> длинной <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов), поэтому не достигает необходимый минимум в <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов).";
		}else{
			$return .= "Элемент <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет длинну значения <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов), поэтому не достигает необходимый минимум в <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов).";
		}
		$flag = 1;
	}
	
	if($error->code == "1832"){
		$errmes = trim($error->message);
		if(strpos($errmes, ", attribute")){
			$return .= "Элемент <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет атрибут <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> со значением <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> длинной <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов), поэтому превышает обязательный максимум в <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов).";
		}else{
			$return .= "Элемент <b>'";
			for($i = 9;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> имеет длинну значения <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов), поэтому превышает обязательный максимум в <b>'";
			for($i = $i + 1;;$i++){
				if($errmes[$i] == "'")
					break;
			}
			for($i = $i + 1;;$i++){
				$return .= $errmes[$i];
				if($errmes[$i] == "'")
					break;
			}
			$return .= "</b> символа(ов).";
		}
		$flag = 1;
	}
	if($error->code == "1839"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> содержит атрибут <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>, имеющий значение <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>, которое не соответствует шаблону <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	if($error->code == "1833"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> имеет значение <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>, которое является меньшим, чем минимально допустимое: <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	
	if($error->code == "1834"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> имеет значение <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>, которое является большим, чем максимально допустимое: <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	
	if($error->code == "1843"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> имеет внутри себя символы, выходящие за пределы контейнеров <b><></b>.";
		$flag = 1;
	}
	
	if($error->code == "1845"){
		$errmes = trim($error->message);
		$return .= "Элемент <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> не найден в XML-схеме.";
		$flag = 1;
	}
	
	if($error->code == "1868"){
		$errmes = trim($error->message);
		$return .= "В элементе <b>'";
		for($i = 9;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b> не хватает обязательного атрибута <b>'";
		for($i = $i + 1;;$i++){
			if($errmes[$i] == "'")
				break;
		}
		for($i = $i + 1;;$i++){
			$return .= $errmes[$i];
			if($errmes[$i] == "'")
				break;
		}
		$return .= "</b>.";
		$flag = 1;
	}
	if($flag == 0)
		$return .= trim($error->message);
    return $return;
}

function libxml_display_errors() {
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
        print libxml_display_error($error);
    }
    libxml_clear_errors();
}

// Enable user error handling
libxml_use_internal_errors(true);
	
if(!$error) {	
	if($_POST['TP'] == "STD_MP"){
		$xml = new DOMDocument();
		$xml->load('upload/'.$data['name']);
		if (!$xml->schemaValidate('C:\Разработка\doc_V03_STD_MP\V03_STD_МP\STD_MP.xsd')) {
			print '<b>При проверке схемы возникли ошибки:</b>';
			libxml_display_errors();
		}else{
			echo "<b>Ваш файл успешно прошёл проверку!</b>";
		}
	}
	if($_POST['TP'] == "STD_MP4"){
		$xml = new DOMDocument();
		$xml->load('upload/'.$data['name']);
		if (!$xml->schemaValidate('C:\Разработка\doc_V04_STD_MP\V04_STD_MP\STD_MP.xsd')) {
			print '<b>При проверке схемы возникли ошибки:</b>';
			libxml_display_errors();
		}else{
			echo "<b>Ваш файл успешно прошёл проверку!</b>";
		}
	}
	if($_POST['TP'] == "STD_TP"){
		$xml = new DOMDocument();
		$xml->load('upload/'.$data['name']);
		if (!$xml->schemaValidate('C:\Разработка\doc_V02_STD_TP\V02_STD_TP\STD_TP.xsd')) {
			print '<b>При проверке схемы возникли ошибки:</b>';
			libxml_display_errors();
		}else{
			echo "<b>Ваш файл успешно прошёл проверку!</b>";
		}
	}
	if($_POST['TP'] == "STD_ZONE"){
		$xml = new DOMDocument();
		$xml->load('upload/'.$data['name']);
		if (!$xml->schemaValidate('C:\Разработка\doc_V02_ZoneToGKN\V02_ZoneToGKN\STD_ZONE.xsd')) {
			print '<b>При проверке схемы возникли ошибки:</b>';
			libxml_display_errors();
		}else{
			echo "<b>Ваш файл успешно прошёл проверку!</b>";
		}
	}
	if($_POST['TP'] == "BND"){
		$xml = new DOMDocument();
		$xml->load('upload/'.$data['name']);
		if (!$xml->schemaValidate('C:\Разработка\doc_V02_BoundToGKN\V02_BoundToGKN\STD_BND.xsd')) {
			print '<b>При проверке схемы возникли ошибки:</b>';
			libxml_display_errors();
		}else{
			echo "<b>Ваш файл успешно прошёл проверку!</b>";
		}
	}
	if($_POST['TP'] == "ACT"){
		$xml = new DOMDocument();
		$xml->load('upload/'.$data['name']);
		if (!$xml->schemaValidate('C:\InspectionAct_v01\InspectionAct\InspectionAct_v01.xsd')) {
			print '<b>При проверке схемы возникли ошибки:</b>';
			libxml_display_errors();
		}else{
			echo "<b>Ваш файл успешно прошёл проверку!</b>";
		}
	}
}
}	
?>