Fórum Root.cz
		Hlavní témata => Vývoj => Téma založeno: Jan Tichý  03. 09. 2010, 10:03:15
		
			
			- 
				Dobrý den, 
 
 pracuji na webových stránkách, kde nejprve stahuji xml soubor, který obsahuje nabídku
 automobilů. Data z tohoto souboru jsou skriptem parsována a následně by měla být uložena do databáze na web server. Jde o to, že vše mi funguje jak má pouze na vývojovém PC - zde když pustím skript parser_cars.php viz. níže dojde k otevření staženého xml souboru a uložení potřebných dat do databáze.
 
 Když tento samý skript přesunu na server, kde beží PHP 5 + MySql 5, jedná se o NAS Synology DS209. Kde php funguje, ale nedaří se mi tam rozjet xml parser. Jde o to, že když pustím skript na serveru, tak nedojde k zpracování xml souboru jako na PC, ale nevypíše se ani žádná chyba. Zjistil jsem, že ve skriptu vůbec nedojde k volání funkcí, které parser má volat, když narazí na počáteční element, koncový atd. K parsování jsem použil SAX.
 
 na této adrese je phpinfo webserveru NASu: www.tal.cz/phpinfo.php
 
 níže uvádím část skriptu - začátek:
 
 $soubor = "./TAL.xml";
 $parser = xml_parser_create('UTF-8');
 xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
 xml_set_element_handler($parser, "StartElement", "EndElement");
 xml_set_character_data_handler($parser, "ObsahPrvku");
 $ObsahXml = file_get_contents($soubor, 0);
 
 xml_parse($parser, $ObsahXml); //or die(chyba($parser));
 
 function StartElement($parser, $element, $atrib)
 {
 ....}
 
 function EndElement($parser, $element)
 {
 ...}
 
 atd.
 skript mi na lokálu jede...
 
 kdyžtak mohu poslat celý skript asi na mail.
 
 Prosím poraďte mi někdo, kde by mohl být zakopanej pes.
 
 Děkuji
 
- 
				Prv daj na zaciatok skriptu:
 error_reporting(E_ALL);
 
 Potom napis co si dostal spat... nezbudni mat zapnute show_errors.
 Pravdepodobne tam nemas kniznicu.
- 
				na začátek skriptu jsem přidal 
 error_reporting(E_ALL);
 
 dále jsem do php.ini přidal
 show_errors = On
 
 jinak je tam nastavení
 display_errors = On, takže by to chyby vypisovat mělo.
 
 ale ani po těchto úpravách mi to nic nenapsalo.
 
 Chtěl bych se zeptat, jakou knihovnu mám případně shánět a jak jí přidám ?
 Jsem v tom začátečník (linux, php, apache).
 
 Děkuji za odpověď
 
- 
				Posli mi teda ten skript ako spravu + nejake template xml.
 Pozri sa ake moduly mas do php5 nainstallovane a tie iste daj aj na ten stroj.
- 
				dáš mi mail, kam bych ti to mohl poslat jako přílohu .zip (xml + skript) ?
			
- 
				Roman.Szabados@Solvedirect.com
			
- 
				Vyřešeno, skript přepsán pro rozhraní SimpleXML a valí to... 
 
 Nevíte, jak je to s nastavením a podporou encoding, když mu pošlu .xml v UTF-8 no problem.
 Když ho pošlu ve windows-1250, tak chyba:
 
 Warning: simplexml_load_file() [function.simplexml-load-file]: TAL.xml:1: parser error : Unsupported encoding windows-1250
 
 na linuxovém systému NASu si s windows-1250 asi neškrtnu co ?
 
 Díky
 
 
 
 
- 
				Na tvoj skript som zatial :| nemal cas, ale s tymto ti mozno pomoct viem :)
 
 mb_convert_encoding ;)
- 
				Alebo utf8_encode ;)
			
- 
				Pomohlo?
			
- 
				Jsem teď mimo, 
 
 v úterý to vyzkouším a dám vědět...
 
 Děkuji moc.
- 
				no mě vadí v tom xml souboru kódování windows-1250 viz. xml:
 
 <?xml version="1.0" encoding="windows-1250" ?>
 <cars xmlns:xs="http://www.w3.org/2001/XMLSchema" >
 
 když tam dám UTF-8, tak mi to jde.
 Potom nastupuje funkce $xml = simplexml_load_file("TAL.xml"); která z xml udělá
 strom objektů.
 
 Nejde to nějak jednoduše uložit do UTF-8 ?
 
 Podle popisu té funkce utf8_encode jsem pochopil, že dostává string v kódování ISO-8859-1
 a vrací UTF, ale jak to realizovat ?
 Projít celý soubor např. takto:
 
 $obsahSouboru = fopen($soubor, "r");
 while ($data = fread($obsahSouboru, 5) {
 ...
 utf8_encode($data);
 ... atd.
 }
 
 po kusech překódovat a uložit do nového souboru v utf ?
 
 
 Díky
 
 
- 
				ano... prezen tym cely subor... napriklad takouto funkciou:
 
 function correct_encoding($text) {
 $current_encoding = mb_detect_encoding($text, 'auto');
 $text = iconv($current_encoding, 'UTF-8', $text);
 return $text;
 }
 
- 
				už mi funguje načítání konvertovaného souboru, ale
 kdyz cely soubor uložim znovu do utf-8, potom v tomto souboru chybí znaky s diakritikou.
 V podstatě veškeré znaky ě,š,č,ř,ž... atd,
 
 použil jsem tento kód:
 $obsah = "<?xml version='1.0' encoding='UTF-8' ?>";
 
 $InFile = fopen("TAL.xml","r") or die("Soubor nelze otevrit");
 $radek = fgets($InFile, 500);
 
 while (! feof($InFile))
 {
 $data = fread($InFile, 1);
 $obsah .= correct_encoding($data);
 }
 fclose($InFile);
 
 $OutFile = FOpen ('nabidka.xml',"w");
 fwrite($OutFile,$obsah);
 FClose ($OutFile);
 
 Prosím poraďte, kde může být problem...
- 
				tipujem to na tento riadok: mb_detect_encoding($text, 'auto');
			
- 
				vyřešeno. pomohlo toto: $retezec = iconv("CP1250", "UTF-8", $retezec);