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);