This is an error 404
There are `0` results
preferences:
1567.51 ms | 1398 KiB | 21 Q<?php
/* Projekt 1 - 09: XML Query v PHP 5 pro IPP 2014/2015
** Jmeno a prijemni: Tomas Hynek (c) 2015
** Login: xhynek09
*/
header("Content-type: text/xml; charset=utf-8");
//###################################################################################
//############################# HELP - NAPOVEDA #####################################
function help(){
echo "################################################################\n",
"############### Projekt 1 - XQR v PHP 5.3.3 ####################\n",
"############### Autor: Tomas Hynek (c) 2015 ####################\n",
"############### Login: xhynek09 ####################\n",
"############### Napoveda ke skriptu ####################\n",
"## --help vypise na standardni vystup napovedu skriptu.\n\n",
"## --input=filename\n\tzadany vstupni soubor muze byt zadan relativni cestou nebo absolutni cestou;v pripade, ze by\n\tnazev ci cesta obsahovala mezeru, tak musi byt uvedena cela cesta i se jmenem souboru v uvozovkach\n\t(znak uvozovek a rovnitka ve jmene soubory neni treba uvazovat); chybi-li tento parametr, tak je\n\tuvazovnan standardni vstup.\n\n",
"## --output=filename\n\tzadany vystupni soubor muze byt zadan relativni cestou nebo absolutni cestou; v pripade, ze by nazev\n\tci cesta obsahovala mezeru, tak musi byt uvedena cesta i se jmenem souboru v uvozovkach (znak uvozovek\n\ta rovnitka ve jmene soubory neni treba uvazovat); chybi-li tento parametr, tak je vystup presmerovan\n\tna standardni vystup; existuje-li jiz vystupni soubor, bude bez varovani prepsan, jinak bude vytvoren\n\tnovy soubor.\n\n",
"## --query='dotaz'\n\tzadany dotaz v dotazovacim jazyce definovanem nize (v pripade zadani timto zpusobem nebude dotaz\n\tobsahovat symbol apostrof).\n\n",
"## --qf=filename\n\tdotaz v dotazovacim jazyce definovanem nize zadany v externim textovem souboru (nelze kombinovat s --query).\n\n",
"## -n\tnegenerovat XML hlavicku na vystup skriptu.\n\n",
"## --root=element\n\tjmeno paroveho korenoveho elementu obalujici vysledky. Pokud nebude zadan, tak se vysledky neobaluji\n\tkorenovym elementem, ac to porusuje validitu XML.\n\n";
}
//###################################################################################
//############### SEPARATE QUERY - VYHODNOCENI VYRAZU SELECT ########################
function separate_query($query)
{
global $select;
global $limit;
global $from;
global $elem_or_atr;
global $operator;
global $literal;
global $matches_out;
global $type_liter;
global $condition;
global $from_all;
$regex = "/^(SELECT\s[a-z]+)".
"(\sLIMIT\s[0-9])*".
"(\sFROM\sROOT|\sFROM\s[a-z]+\x2E[a-z]+|\sFROM\s\x2E[a-z]+|\sFROM\s[a-z]+)".
"($|\sWHERE(\sNOT)?\s([a-z]+\x2E[a-z]+|\x2E[a-z]+|[a-z]+)\s".
"((CONTAINS|\x3D|\x3C|\x3E)\s(\x22\w+\x22)|(\x3D|\x3C|\x3E)\s([0-9]+)))\z/";
if (!preg_match_all($regex, $query, $matches_out)) // funkce pracuje s RV a naplni dotaz do pole dle pravidel
{
file_put_contents('php://stderr', "Error - bad grammar of query\n");
exit(80);
}
// $count_q = count($matches_out);
// for ($l=0; $l < $count_q; $l++)
// {
// print_r($matches_out[$l]);
// }
if (($matches_out[1][0]) !='') //SELECT element
{
$arr = explode("SELECT ", $matches_out[1][0]); // rozparsrovani na SELECT | element
$select = $arr[1]; // vyjmuti element do $select
echo ("select:".$select."\n");
}
if (($matches_out[2][0]) !='') //LIMIT number
{
$arr = explode(" LIMIT ", $matches_out[2][0]); // rozparsrovani na SELECT | element
$limit = $arr[1]; // vyjmuti element do $select
echo ($limit."\n");
}
if (($matches_out[3][0]) !='') //FROM <FROM-ELM>
{
$arr = explode(" FROM ", $matches_out[3][0]); // rozparsrovani na SELECT | element
$from = $arr[1]; // vyjmuti element do $select
echo ("from:".$from."\n");
if ($from == 'ROOT')
{$from_all = 1;}
}
if (($matches_out[4][0]) !='') //WHERE exists?
{
$condition = 1; // YES
}
if (($matches_out[5][0]) !='') //NOT
{
$arr = explode(" ", $matches_out[5][0]); // rozparsrovani na SELECT | element
$not = $arr[1];
echo ($not."\n");
}
if (($matches_out[6][0]) !='') //<ELEMENT-OR-ATTRIBUTE>
{
$elem_or_atr = $matches_out[6][0]; // ulozeni do promenne
echo ($elem_or_atr."\n");
}
if (($matches_out[8][0]) !='') //<RELATION-OPERATOR> |<|>|=|CONTAINS| pro STRING
{
$opr = $matches_out[10][0]; // ulozeni relation operatoru
if ($opr == '='){$operator=1;}
else if($opr == '>'){$operator=2;}
else {$operator=3;}
echo ($operator."\n");
}
if (($matches_out[9][0]) !='') //<LITERAL> STRING
{
$literal = $matches_out[9][0]; // ulozeni literalu - string
$type_liter = 1;
echo ($type_liter."\n");
}
if (($matches_out[10][0]) !='') //<RELATION-OPERATOR> |<|>|=| pro NUM
{
$opr = $matches_out[10][0]; // ulozeni relation operatoru
if ($opr == '='){$operator=1;}
else if($opr == '>'){$operator=2;}
else {$operator=3;}
echo ($operator."\n");
}
if (($matches_out[11][0]) !='') //<LITERAL> NUM
{
$literal = $matches_out[11][0]; // ulozeni literalu - num
$type_liter = 2;
echo ($type_liter."\n");
}
return;
}
//###################################################################################
//##################### PROHLEDAVANI a ZPRACOVANI WHERE #############################
function searchWhere($key, $array, $simple_obj)
{
if (array_key_exists($key, $array))
{
foreach ($array as $index => $subarray)
{
if ($index == $key)
{
if (is_object($subarray))
{
echo $index." je to object\n";
//$simple_obj = new SimpleXMLElement("<{$index}>{$key}</{$index}>");
$simple_obj->addChild($key, $subarray);
print_r($simple_obj);
}
echo("item find: {$index}=>{$key}\n");
}
}
return;
}
else
{
foreach ($array as $index => $subarray)
{
echo("RE-SEACHING {$index} FOR : {$key}\n");
return search($subarray, $key, $simple_obj);
}
}
return;
}
//###################################################################################
//#################### PROHLEDAVANI a ZPRACOVANI SELECT #############################
function search($array, $key, $simple_out)
{
global $select, $rt, $root_elem, $from;
if (!is_object($simple_out) && ($rt == 1))
{
$simple_out = new SimpleXMLElement("<{$root_elem}></{$root_elem}>");
}
if (array_key_exists($key, $array))
{
foreach ($array as $index => $subarray)
{
if ($index == $key )
{
if (is_object($subarray))
{
echo $index." je to object\n";
print_r($simple_out);
}
if ($rt != 1)
{
$simple_out = new SimpleXMLElement("<{$index}></{$index}>");
echo("item find: {$index}=>{$key}\n");
searchWhere($select, $subarray, $simple_out);
}
else
{ echo("item find: {$index}=>{$key}\n");
$elem = $simple_out->addChild($index);
searchWhere($select, $subarray, $elem);
}
}
return $simple_out;
}
}
else
{
foreach ($array as $index => $subarray)
{
echo("RE-SEACHING {$index} FOR : {$key}\n");
return search($subarray, $key, $simple_out);
}
}
return;
}
//###################################################################################
//################# PROHLEDAVANI a ZPRACOVANI PRI FROM ROOT #########################
function searchRoot($array, $key, $simple_out)
{
global $rt, $root_elem;
if (!is_object($simple_out) && ($rt == 1))
{
$simple_out = new SimpleXMLElement("<{$root_elem}></{$root_elem}>");
}
echo "zpracovavam ROOT\n";
if (array_key_exists($key, $array))
{
foreach ($array as $index => $subarray)
{
if ($index == $key )
{
if ($rt == 1) // pokud --root=element
{
$elem = $simple_out->addChild($index);
}
else // pokud neni zadan --root=
{
if (!is_object($simple_out)) // tady jeste nevim jeslti to je dobre, jestli vytvorit book jednou nebo dvakrat??
{ // viz sekvence prikazu php -d open_basedir="" xqr.php --input=xml02.in --qf=query02.qu
$simple_out = new SimpleXMLElement("<{$index}></{$index}>");
$elem = $simple_out;
}
}
foreach ($subarray as $child => $data)
{ echo("vypisek: {$child}=>{$data}\n");
$elem->addChild($child, $data);
}
}
}
return $simple_out;
}
else
{
foreach ($array as $index => $subarray)
{
echo("RE-SEACHING {$index} FOR : {$key}\n");
return searchRoot($subarray, $key, $simple_out);
}
}
return;
}
//###################################################################################
//########################## HLAVNI PROGRAM SKRIPTU #################################
//###################################################################################
$in = 0; // indikace parametru --input
$out = 0; // indikace parametru --output
$qr = 0; // indikace parametru --query
$qf = 0; // indikace parametru --qf
$rt = 0; // indikace parametru --root
$n = 0; // indikace parametru -n
$root=0; // 0-nic, 1-ROOT... jmeno paroveho korenoveho elementu obalujici vysledky
$type_liter=0; // 0-nic, 1-string, 2-num
$condition=0; // 0-bez podminky, 1-s podminkou
$xml_arr = 0; //
global $from, $from_all;
// $operator = 0; // 0-nic, 1-equal, 2-more, 3-less
//$input; // v stupni soubor
//$output; // vystupni soubor
//$query; // zadany dotaz v dotaz. jazyce
//$qfile; // zadany dotaz v externim textovem souboru
//$root_elem; // ulozen obalujici root
//$xml_arr_out;
//########################### ZPRACOVANI ARGUMENTU ##################################
for ($i = 0; $i < $argc; $i++)
{
if ($i > 0) // pokud prochazime druhy argument a vyse.....
{
if ((strpos($argv[$i], '--help')) !== false) // ---help
{
$help = explode("--help", $argv[$i]);
if (($argc > 2) || ($help[1] != "") || ($help[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
help(); // konec skriptu bez chyby
exit(0);
}
else if ((strpos($argv[$i], '--input=')) !== false) // --input
{
$input = explode("--input=", $argv[$i]);
if (($input[1] == "") || ($input[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
if (file_exists("$input[1]"))
{
fclose(STDIN);
$xml_arr = simplexml_load_file("$input[1]");
//echo "ZDE JE ROOT ELEMENT: ".$xml_arr->getName()."\n";
if($xml_arr === FALSE)
{
file_put_contents('php://stderr', "Error - file isnt exist\n");
exit(2);
}
//print_r($xml);
}
else
{
file_put_contents('php://stderr', "Error - file isnt exist\n");
exit(2);
}
$in += 1;
}
else if ((strpos($argv[$i], '--output=')) !== false) // --output
{
$output = explode("--output=", $argv[$i]);
if (($output[1] == "") || ($output[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
//fclose(STDOUT);
$fopen_out = fopen("$output[1]", 'w');
$fopen_final_out = $output[1];
echo $fopen_out."\n";
$out += 1;
}
else if ((strpos($argv[$i], '--query=')) !== false) // --query
{
$query = explode("--query=", $argv[$i]);
if (($query[1] == "") || ($query[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
separate_query($query[1]);
$qr += 1;
}
else if ((strpos($argv[$i], '--qf=')) !== false) // --qf
{
$qfile = explode("--qf=", $argv[$i]);
if (($qfile[1] == "") || ($qfile[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
if (!(is_readable($qfile[1])))
{
file_put_contents('php://stderr', "Error - file isnt exist\n");
exit(2); // spatny format parametru nebo zakazana kombinace parametru
}
$query_string = file_get_contents($qfile[1]);
var_dump($query_string);
separate_query($query_string);
$qf += 1;
}
else if ((strpos($argv[$i], '--root=')) !== false) // --root
{
$root = explode("--root=", $argv[$i]);
if (($root[1] == "") || ($root[0] != ""))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
$root_elem = $root[1];
$rt += 1;
}
else if ((strpos($argv[$i], '-n')) !== false) // -n
{
$n += 1;
}
else // jine argumenty nejsou povoleny
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
}
}
//###################################################################################
if (($in > 1)||($out > 1)||($qr > 1)||($qf > 1)||($rt > 1)||($n > 1)) // pokud se nejaky parametr opakuje
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
if (($qr > 0) && ($qf > 0))
{
file_put_contents('php://stderr', "Error - bad param\n");
exit(1); // spatny format parametru nebo zakazana kombinace parametru
}
print_r($xml_arr);
if ($from_all == 0)
{
$xml_out = search($xml_arr, $from, NULL);
}
else
{
$xml_out = searchRoot($xml_arr, $select, NULL);
}
echo"\n##### Konecna tabulka obejktu ##### \n";
//print_r($xml_out);
//var_dump($arr);
if (is_object($xml_out))
{ $xml_final_output = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
if ($xml_final_output = $xml_out->asXML()) // prevedeni zpet na XML
{ echo "wwwwwtttttttttttffffffffff\n";
if ($out == 1)
{
$xml_out->asXML("$fopen_final_out");
fclose($fopen_out);
}
else
{
echo $xml_final_output;
}
}
else
{
file_put_contents('php://stderr', "Error - pri prevodu na XML format!\n");
exit(100);
}
}
//else ////// totot haze exit 100 pri skriptu test01 ......whaaaaat??????
//{
// file_put_contents('php://stderr', "Error - pri prevodu na XML format!\n");
// exit(100);
//}
echo "\n";
exit(0); // konec skriptu bez chyby