NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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.

Aktivity
Avatar
Nikola Linková:13.2.2017 2:56

Už nejaký čas riešim problém na jednom hostingu. Od zdroja dostávam XML súbory s dátami, ktoré ukladám do DB a následne spracujem, skripty mám v poriadku a na localhoste mi to správne funguje, takisto na niekoľkých rôznych hostingoch. Problém je však na jednom nemenovanom freehostingu, kde môj skript prebehne v poriadku, vypíše mi, že dáta boli uložené, ale nič sa neuloží. Na spracovanie XML súboru používam funkciu simplexml_load_fi­le(). V čom môže byť problém, ak uvážim, že verzie PHP na hostingoch sú takmer rovnaké, tak by to mohlo byť už len v nejakej zakázanej súčasti/rozší­renia/a pod. Ešte doložím, že podpora z freehostingu je nulová. Do budúcna si rozhodne vyberiem iný, funkčný hosting s riadnou podporou, ale aj tak by ma zaujímalo v čom spočíva takáto nefunkčnosť.

Vedel by mi niekto poradiť? Ďakujem

 
Odpovědět
13.2.2017 2:56
Avatar
Odpovídá na Nikola Linková
Neaktivní uživatel:13.2.2017 3:33

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.

Nahoru Odpovědět
13.2.2017 3:33
Neaktivní uživatelský účet
Avatar
Odpovídá na Nikola Linková
Matúš Petrofčík:13.2.2017 3:45

Č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é/ne­povolené 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).

Editováno 13.2.2017 3:46
Nahoru Odpovědět
13.2.2017 3:45
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Michal Gros
Tvůrce
Avatar
Odpovídá na Matúš Petrofčík
Michal Gros :13.2.2017 8:33

Na hosting mssql jedine azure.com.
Jsou tam i free tiery na vyzkouseni.
Pokud bys cokoluv potreboval klidne mi napis.

Nahoru Odpovědět
13.2.2017 8:33
Jestli jste dobří nahrnou na Vás spoustu práce. Jestli jste sakra dobří, tak se jí dokážete zbavit.
Avatar
Odpovídá na Neaktivní uživatel
Nikola Linková:13.2.2017 11:37

á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ý

 
Nahoru Odpovědět
13.2.2017 11:37
Avatar
Odpovídá na Nikola Linková
Nikola Linková:13.2.2017 11:49

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);
 
Nahoru Odpovědět
13.2.2017 11:49
Avatar
shaman
Člen
Avatar
Odpovídá na Nikola Linková
shaman:13.2.2017 15:47

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

Nahoru Odpovědět
13.2.2017 15:47
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Odpovídá na shaman
Nikola Linková:13.2.2017 22:38

ďakujem, vyskúšam tvoju radu

 
Nahoru Odpovědět
13.2.2017 22:38
Avatar
Odpovídá na shaman
Nikola Linková:13.2.2017 23:14

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

 
Nahoru Odpovědět
13.2.2017 23:14
Avatar
Odpovídá na Nikola Linková
Matúš Petrofčík:13.2.2017 23:30

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;
Editováno 13.2.2017 23:31
Nahoru Odpovědět
13.2.2017 23:30
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Nikola Linková:14.2.2017 11:34

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

 
Nahoru Odpovědět
14.2.2017 11:34
Avatar
Odpovídá na Nikola Linková
Michal Štěpánek:14.2.2017 12:04

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?

Nahoru Odpovědět
14.2.2017 12:04
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Nikola Linková
Matúš Petrofčík:14.2.2017 12:19

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

Nahoru Odpovědět
14.2.2017 12:19
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Nikola Linková:14.2.2017 18:16

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é,

Editováno 14.2.2017 18:19
 
Nahoru Odpovědět
14.2.2017 18:16
Avatar
Odpovídá na Nikola Linková
Matúš Petrofčík:14.2.2017 18:28

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áš.

Nahoru Odpovědět
14.2.2017 18:28
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Nikola Linková:14.2.2017 18:29

na freehostingu var_dump vypíše bool(false)
na localhoste samozrejme vypisuje obsah toho xml súboru

Editováno 14.2.2017 18:30
 
Nahoru Odpovědět
14.2.2017 18:29
Avatar
Odpovídá na Nikola Linková
Matúš Petrofčík:14.2.2017 18:37

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.

Nahoru Odpovědět
14.2.2017 18:37
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Nikola Linková:14.2.2017 18:37

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

 
Nahoru Odpovědět
14.2.2017 18:37
Avatar
Odpovídá na Nikola Linková
Matúš Petrofčík:14.2.2017 18:39

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 :D

Nahoru Odpovědět
14.2.2017 18:39
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Nikola Linková:14.2.2017 19:32

á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é

Editováno 14.2.2017 19:32
 
Nahoru Odpovědět
14.2.2017 19:32
Avatar
Odpovídá na Nikola Linková
Matúš Petrofčík:14.2.2017 19:37

Tak ja som zadal toto do googlu:

simplexml_load_fi­le(): 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.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
14.2.2017 19:37
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Nikola Linková:14.2.2017 19:41

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?

 
Nahoru Odpovědět
14.2.2017 19:41
Avatar
Odpovídá na Matúš Petrofčík
Nikola Linková:14.2.2017 19:43

tak,tak, stihli sme to narovnako, takže čo s tým?

 
Nahoru Odpovědět
14.2.2017 19:43
Avatar
Odpovídá na Nikola Linková
Matúš Petrofčík:14.2.2017 19:45

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ú :D :D

Editováno 14.2.2017 19:46
Nahoru Odpovědět
14.2.2017 19:45
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Nikola Linková:14.2.2017 19:57

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

 
Nahoru Odpovědět
14.2.2017 19:57
Avatar
Odpovídá na Nikola Linková
Matúš Petrofčík:14.2.2017 20:10

Ja by som s nimi skončil dávno :D Ak som ti pomohol, môžeš moju odpoveď o 19:37 označiť fajočkou :)

Nahoru Odpovědět
14.2.2017 20:10
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Nikola Linková:14.2.2017 22:15

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.

 
Nahoru Odpovědět
14.2.2017 22:15
Avatar
Nahoru Odpovědět
14.2.2017 22:43
obsah kocky = r^2 ... a preto vlak drnká
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 28 zpráv z 28.