Diskuze: Spracovanie XML dát a uloženie do MySQL DB
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 28 zpráv z 28.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Tipnul bych si, že bude problém u práce s databází, načtení a zpracování xml většinou bývá poměrně jednoduchá část. Ale můžeme jen spekulovat, pokud nevidímekonfiguraci serveru, kód a errory nebo error log.
Čo je to za hosting?! Skús trebárs Endoru (ak to nie je ona), s ňou som okrem "podpory" nemal väčší problém. Platený je fajn Websupport, alebo WY (Webglobe-Yegon).
Inak ako píše Jiří, takto môžeme len špekulovať. Ja si tipnem nejaký problém s extensions (nedostupné/nepovolené rozšírenie pre xml). Skús nám tu postnúť aspoň tú časť kódu, ktorá to ukladá do DB (len pre istotu, že to nemáš napísané tak, aby prípadné chyby ignorovala).
Na hosting mssql jedine azure.com.
Jsou tam i free tiery na vyzkouseni.
Pokud bys cokoluv potreboval klidne mi napis.
áno, načítanie a spracovanie je v pohode, potvrdzuje to aj správna
funkčnosť na rôznych hostingoch
skúšala som aj toto:
$url = "http://zdroj.com/data.xml";
$string = file_get_contents($url);
print_r($string);
kým na localhoste mi print_r(), vypíše obsah z $url a beh scriptu sa
zastaví,
na tom freehostingu vôbec na to nereagovalo, ako keby aj ten print_r() bol
ignorovaný, vypísalo to, že uloženie dát prebehlo v poriadku, a samozrejme
znovu nič neuložilo,
ak by to pomohlo pripravím skrátený zápis ako to spracovávam,
podotýkam, že som v tomto začiatočníčka, takže nečakajte odo mňa
zázraky
ale ďakujem za reakciu a snahu pomôcť
PS: hosting nehľadám, ako som písala, mám k dispozícii aj funkčné hostingy, aj freehosting aj platený, len som chcela prísť na to v čom spočíva problém, iba dúfam, že nemám chybu ja, aj keď môj zápis určite nebude dokonalý
V podstate to vyzerá takto, ale v skutočnosti je tam oveľa viac položiek na ukladanie
header('Content-Type: text/html; charset=utf-8');
require_once "../core.php";
require_once BASEDIR."config.php";
$result= dbquery("TRUNCATE TABLE items");
$url="https://www.zdroj.eu/software/tomato.php?table=records&pass=pokiu545aa22"; //link je vymyslený
$xml = simplexml_load_file($url);
foreach($xml->channel->item as $row) {
$car_id = $row->idserver;
$image = $row->image;
$result = dbquery("INSERT INTO items (car_id,image,) VALUES ('$car_id','$image') ");
}
if(!$result){echo "MySQL ERROR";}
else {
echo "Dáta boli úspešne uložené";
}
redirect(BASEDIR,$script=true);
Tvoj kod kontroluje len posledny insert, pretoze inserty mas v foreach loope a iba posledne $result sa vracia. Skus foreach a echo obalit do try .. catch .. Napriklad takto:
try {
foreach($xml->channel->item as $row)
{
$car_id = mysql_real_escape_string($row->idserver);
$image = mysql_real_escape_string($row->image);
$result = dbquery("INSERT INTO items (car_id,image,) VALUES ('$car_id','$image') ");
}
} catch (Exception $exception) {
die($exception->getMessage());
} finally {
echo "Dáta boli úspešne uložené";
}
Ak je tam nejaky problem tak ho exception zachyti
vložila som to do môjho skriptu, ale vypisuje chybu: Parse error:
syntax error, unexpected '{' na riadku kde je finally
{,
keďže som s týmto nikdy nerobila, ani netuším v čom je chyba, lebo tvoj
príklad vyzerá bezchybne a aj na php.net som našla podobný zápis
Skús to takto:
<?php
try {
foreach($xml->channel->item as $row)
{
$car_id = mysql_real_escape_string($row->idserver);
$image = mysql_real_escape_string($row->image);
$result = dbquery("INSERT INTO items (car_id,image,) VALUES ('$car_id','$image') ");
}
echo "Dáta boli úspešne uložené";
} catch (Exception $exception) {
die($exception->getMessage());
}
Možno používaš hosting so staršou verziu PHP, to by teoreticky mohla byť aj tá príčina, že ti to spracovanie xml nefunguje block finally funguje od PHP 5.5, akú máš verziu? Dozvieš sa týmto kódom:
<?php phpinfo(); exit;
včera som nemohla odoslať odpoveď, vraj som ich v poslednej dobe poslala
priveľa, tak to skúšam dnes,
tú verziu bez finally som skúšala, bolo to už bez chybovej hlášky, ale aj
tak mi to nič nevypísalo,
PHP verzie mám na freehostingu 5.3.29, na localhoste kde môj program frčí
bez chyb, mám 5.4.45, a iba na jednom z mnou používaných hostingoch je
verzia PHP vyššia ako 5.5
mňa však prekvapuje aj to, že mi vyššie spomínaný print_r() tiež nič nevypíše, a to kontrolujem iba prichádzajúce dáta z xml súboru, podľa mňa bude zrada už tam, že tom nedokáže ani prečítať xml súbor, čo ma dosť zaráža, lebo napr. rss_feedy sa už používajú dosť dlho, a dokonca som s tým experimentovala aj na tom freehostingu
vzhľadom k tomu, že som v tomto obore ešte začiatočníčka -samouk, som vám vďačná za akúkoľvek radu
podľa mňa bude zrada už tam, že tom nedokáže ani prečítať xml súbor
a zkusila sis něco z toho souboru zobrazit ve stránce?
Namiesto print_r skús var_dump, ak tam nič nebude, vypíše sa null.
Prosím vyskúšaj endoru a novšie PHP, nemá zmysel sa tým zaoberať ak to na novšom PHP funguje. Len zbytočne strácaš čas.
Teraz si myslím že na tom serveri nie je povolené načítanie externých stránok, a to je ten problém, len to nevypisuje chybu. Toto nastavenie vieš zistiť cez phpinfo, nastavenie sa nazýva tuším allow_url_fopen
allow_url_fopen je povolený,
prosím vás, ešte raz: chcem len prísť na príčinu, prečo to nejde, aby
som v budúcnosti vedela pri podobnej chybe správne reagovať,
tento freehosting mi už môže byť ukradnutý, predsa si nedám dôležitý
web na hosting, ktorý nemá ani podporu, ale vždy je dobré vedieť niečo o
chybe, ktorá sa môže vyskytnúť aj inde
momentálne mám k dispozícii hosting, kde to správne funguje, takže týmto smerom je zbytočné, aby ste mi radili ten alebo onen hosting
allow_url_fopen je povolený, aj všetko okolo xml je povolené alebo aktívne, možno chýba iba nejaký zásuvný modul, alebo niečo podobné,
Tak si môžeš porovnať informácie z phpinfo(); funkcie medzi fungujúcim a nefungujúcim hostingom a pozri čo v tom nefungujúcom chýba. Ja ti už viac poradiť neviem, snáď nájdeš čo hľadáš.
na freehostingu var_dump vypíše bool(false)
na localhoste samozrejme vypisuje obsah toho xml súboru
Nasledujúce citácie sú z http://php.net/…contents.php. Nájdeš tam aj nejaké ukážky.
On failure, file_get_contents() will return FALSE
Takže niečo zlyhalo pri načítaní toho externého súboru.
An E_WARNING level error is generated if filename cannot be found, maxlength is less than zero, or if seeking to the specified offset in the stream fails.
Takže pri chybe by to malo vyhodiť varovanie.
Takto povolíš zobrazovanie chýb (nemusí fungovať všade ale skúsiť to môžeš):
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
Možno ti to vypíše dôvod.
to som urobila ako prvé, ale je tam množstvo rozdielov a ja ani netuším, čo zrovna chýba, alebo je zakázané na tom freehostingu, dokonca sa mi raz ozvala aj podpora, ale reakcia bola iba také, že sa na to pozrú, o dva dni mi napísali, aby som to skúsila znovu, samozrejme zase to nešlo a odvtedy sú ticho, takže kašlem na ten "freehosting", aj tak ma už žerie dlhšie
ale aj tak ďakujem za doterajšiu pomoc
Pozri komentár vyššie, odoslali sme to v tom istom čase, dokonca mi najprv prišla notifikácia a až tak sa odoslal formulár, a aj tak som vyššie
áno, všimla som si to, teraz skúmam výsledok posledného pokusu, vypísalo mi to zopár Warningov a Notice, a teraz hľadám odpovede na ne, v podstate je to:
Warning: simplexml_load_file(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in /home/..../script.php on line 14
Warning: simplexml_load_file(): I/O warning : failed to load external entity "https://....eu/zdroj.xml" in /home/..../script.php on line 14
Notice: Trying to get property of non-object in /home/..../script.php on line 21
Notice: Trying to get property of non-object in /home/..../script.php on line 21
Warning: Invalid argument supplied for foreach() in /home/..../script.php on line 21
zatiaľ je moje hľadanie neúspešné
Tak ja som zadal toto do googlu:
simplexml_load_file(): Unable to find the wrapper "https"
A hneď prvý príspevok je http://stackoverflow.com/…n-you-config
Podľa toho viem, že na serveri nie je povolené rozšírenie php_openssl, aby sa dali používať url adresy s https:// protokolom a šifrovaním. Tak, problém by sme mali vyriešený
PS: používaj tlačítko "Odpovédět" inak mi neprídu upozornenia.
tak sa mi podarilo zistiť, že na tom freehostingu nie je povolený openssl, dalo by sa to zapnúť na "diaľku", buď v php alebo v htacces?
tak,tak, stihli sme to narovnako, takže čo s tým?
S tým nespravíš nič pokiaľ to nie je tvoj server, pretože by si musela pozmeniť konfiguráciu php v súbore php.ini (u linuxov je to napr. /etc/php/php.ini, /etc/apache2/php.ini, a podobne), a následne reštartovať server (na čo nemáš oprávnenie). Cez .htaccess ani v php kóde sa to nedá, pretože tieto rozšírenia sa načítavajú pri spúšťaní/reštarte serveru.
//edit: Môžeš tomu hostingu poslať mail nech to tam pridajú
hm, takže v htacces pomocou php_flag to tam nedám, skúsim teda ešte raz kontaktovať podporu, možno ma vypočujú a povolia to, inak s nimi definitívne končím
ďakujem za pomoc, bez nej by som určite neprišla na tú "chybu" tak rýchlo, skôr by som to nezistila vôbec
Ja by som s nimi skončil dávno Ak som ti pomohol, môžeš moju odpoveď o 19:37 označiť fajočkou
Problém vyriešený aj na freehostingu, vyriešili to svojsky, prv než som
im stihla napísať tak som dostala od nich správu kde mi navrhli, aby som v
cpaneli zmenila verziu php na vyššiu, keď som to zmenila na verziu 5.6 odrazu
bol openssl povolený a hurá, aj stránka sa sfunkčnila.
Tak sa zdá, že im ešte dám šancu.
Zobrazeno 28 zpráv z 28.