Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ XML _ [XML][DOM] Problem z pobraniem danych z zew. serwera

Napisany przez: Ryrzy 14.03.2014, 11:27:29

Witam, próbuję zrobić skrypt, który pobierałby dane z serwera LG o telefonie na podstawie jego IMEIu... link do takich danych to np:

http://csmg.lgmobile.com:9002/csmg/b2c/client/auth_model_check2.jsp?esn=358635053320769

Skrypt próbuję zrobić na bazie http://www.w3schools.com/xml/xml_to_html.asp lub http://wwwgo.pl/article/9/phpquery_-_szybkie_parsowanie_dokumentow_na_podobienstwo_jquery

i problem pojawia się gdy jako plik podaje adres do tegoż właśnie serwera LG... nic nie pobiera... przez przeglądarke link działa... jeśli zawartosc linku zapisze do testowego xml i link w skrypcie zmienię na odnosnik do samego pliku test.xml to działa i pobiera dane które chcę poprawnie... Co może być powodem problemu pobierania danych bezpośrednio z linku i czy da się to obejść ?

Dziękuje smile.gif

Napisany przez: markuz 14.03.2014, 11:49:34

  1. <?php
  2.  
  3. $objDOM = new DOMDocument();
  4.  
  5. $objDOM->load("http://csmg.lgmobile.com:9002/csmg/b2c/client/auth_model_check2.jsp?esn=358635053320769");
  6.  
  7. http://www.php.net/var_dump($objDOM);
  8.  
  9. ?>


U mnie działa..

Napisany przez: Ryrzy 14.03.2014, 11:55:33

mam to tak:

  1. <?
  2.  
  3. $objDOM = new DOMDocument();
  4. $objDOM->load("http://csmg.lgmobile.com:9002/csmg/b2c/client/auth_model_check2.jsp?esn=358635053320769");
  5.  
  6. $dane = $objDOM->getElementsByTagName("auth_model_check");
  7.  
  8. foreach( $dane as $value )
  9. {
  10. $model = $value->getElementsByTagName("model");
  11. $models = $model->item(0)->nodeValue;
  12.  
  13.  
  14. $sw_version = $value->getElementsByTagName("sw_version");
  15. $sw_versions = $sw_version->item(0)->nodeValue;
  16.  
  17. http://www.php.net/echo "$models $sw_versions";
  18. }
  19.  
  20. ?>
i nic nie wyświetla, po zmienia linku na test.xml, w którym jest dokładnie to samo co pod linkiem... działa ;/ wyświetla dane które chce ...

po użyciu Twojego kodu mam:
Cytat
object(DOMDocument)#1 (34) { ["doctype"]=> NULL ["implementation"]=> string(22) "(object value omitted)" ["documentElement"]=> NULL ["actualEncoding"]=> NULL ["encoding"]=> NULL ["xmlEncoding"]=> NULL ["standalone"]=> bool(true) ["xmlStandalone"]=> bool(true) ["version"]=> string(3) "1.0" ["xmlVersion"]=> string(3) "1.0" ["strictErrorChecking"]=> bool(true) ["documentURI"]=> NULL ["config"]=> NULL ["formatOutput"]=> bool(false) ["validateOnParse"]=> bool(false) ["resolveExternals"]=> bool(false) ["preserveWhiteSpace"]=> bool(true) ["recover"]=> bool(false) ["substituteEntities"]=> bool(false) ["nodeName"]=> string(9) "#document" ["nodeValue"]=> NULL ["nodeType"]=> int(9) ["parentNode"]=> NULL ["childNodes"]=> string(22) "(object value omitted)" ["firstChild"]=> NULL ["lastChild"]=> NULL ["previousSibling"]=> NULL ["attributes"]=> NULL ["ownerDocument"]=> NULL ["namespaceURI"]=> NULL ["prefix"]=> string(0) "" ["localName"]=> NULL ["baseURI"]=> NULL ["textContent"]=> string(0) "" }

Napisany przez: markuz 14.03.2014, 11:58:12

Dziwne bo u mnie na XAMPP-ie podany przez Ciebie kod działa (po zmianie znacznika z <? na <?php).

Z jakiego serwerz korzystasz?

Napisany przez: nospor 14.03.2014, 11:58:31

U mnie Twoj kod dziala.

Pewnie masz na serwerze wyłączone ładowanie plikow z URLi. Musisz ustawic flage
allow_url_fopen

Napisany przez: Ryrzy 14.03.2014, 12:03:06

czyli problem leży po stronie mojego serwera ... ehh a siedzę nad tym od rana i myśle smile.gif ok, dziękuje... podeślę info administracji, zobaczymy co odpowie smile.gif dam znac jak się sprawa potoczyła smile.gif

Napisany przez: nospor 14.03.2014, 12:04:18

Wystarczy ze odpalisz
phpinfo();
i bedziemy wiedzili jaką masz flage allow_url_fopen czy on czy off

Napisany przez: Ryrzy 14.03.2014, 12:06:21

hmmmm dziwne, bo mam:

Cytat
allow_url_fopen On On

Napisany przez: Ryrzy 14.03.2014, 12:13:47

cURL support enabled
cURL Information 7.28.0

Napisany przez: arpi 8.05.2014, 20:30:55

Mam bardzo podobny problem.
Gdy odczytuje dane z pliku xml wszytsko jest ok.

Plik xml.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <produkty>
  3. <produkt>
  4. <nazwa_tow>sterownik</nazwa_tow>
  5. <ceny>
  6. <cena prog="1">123</cena>
  7. <cena prog="2">125</cena>
  8. </ceny>
  9. </produkt>
  10. </produkty>


skrypt php
  1. <?php
  2.  
  3. $xml = simplexml_load_file("xml.xml");
  4.  
  5. foreach ($xml->produkt as $produkt) {
  6. http://www.php.net/echo $produkt->nazwa_tow . '<br>';
  7. foreach ($produkt->ceny->cena as $cena) {
  8. http://www.php.net/echo $cena->getName() . ' ' . $cena['prog'] . ' to: ' . $cena . '';
  9. }
  10. }
  11.  
  12.  
  13. ?>


Problem pojawia się gdy chce odczytać dane z pliku xml generowanego w locie
plik xml.php
  1. <?php
  2. http://www.php.net/header('Content-type: text/xml; charset=utf-8');
  3. $tresc ='<?xml version="1.0" encoding="utf-8"?>
  4. <produkty>
  5. <produkt>
  6. <nazwa_tow>sterownik</nazwa_tow>
  7. <ceny>
  8. <cena prog="1">123z</cena>
  9. <cena prog="2">125z</cena>
  10. </ceny>
  11. </produkt>
  12. </produkty>';
  13. http://www.php.net/echo $tresc;
  14. ?>


skrypt php identyczny ze zmienioną ściężką
  1. <?php
  2.  
  3. $xml = simplexml_load_file("xml.php");
  4.  
  5. foreach ($xml->produkt as $produkt) {
  6. http://www.php.net/echo $produkt->nazwa_tow . '<br>';
  7. foreach ($produkt->ceny->cena as $cena) {
  8. http://www.php.net/echo $cena->getName() . ' ' . $cena['prog'] . ' to: ' . $cena . '';
  9. }
  10. }
  11.  
  12.  
  13. ?>


Czy takie pliki jakoś inaczej należy odczytywać ? Nie znalazłem niestety informacji nigdzie na ten temat...
w phpinfo mam
allow_url_fopen On On

Napisany przez: trueblue 8.05.2014, 21:26:34

Ale jaki masz dokładnie problem?
Występuje jakiś błąd?


Napisany przez: arpi 8.05.2014, 22:01:29

pojawia się pusta strona w przeglądarce przy odczycie z pliku xml.php

testowałem skrypt na 2 róznych serwerach na których administruje strony, ale nie działa również włączenie błędów
error_reporting( E_ALL | E_STRICT );
ini_set( 'display_errors', 1 );

aby cokolwiek podejrzeć...

Dodam, że wpisanie linku do strony na zewnętrzym serwerze w przeglądarce generuje plik xml poprawnie więc dostęp na pewno jest prawidłowy.

Napisany przez: trueblue 9.05.2014, 07:39:19

Spróbuj pobrać najpierw plik file_get_contents i wyświetlić zawartość.
Ścieżka do pliku xml.php jest poprawna?

Napisany przez: nospor 9.05.2014, 07:41:37

$xml = simplexml_load_file("xml.php");
Przeciez to pobiera zawartosc pliku.php a nie wynik dzialania pliku.php....
Identycznie zachowa sie file_get_contents() - to pobierze zawartosc pliku a nie wynik jego wykonania....

Napisany przez: trueblue 9.05.2014, 08:03:14

Cytat(nospor @ 9.05.2014, 08:41:37 ) *
Przeciez to pobiera zawartosc pliku.php a nie wynik dzialania pliku.php....
Identycznie zachowa sie file_get_contents() - to pobierze zawartosc pliku a nie wynik jego wykonania....

Z zewnętrznego adresu URL?

Ja rozumiem, że kolega chce pobrać z zewnętrznego (pisze, że "wpisanie linku do strony na zewnętrznym serwerze w przeglądarce generuje plik xml").
Stąd moje pytanie o poprawność ścieżki.

Napisany przez: nospor 9.05.2014, 10:48:00

$xml = simplexml_load_file("xml.php");
Kod ten wskazuje ewidentnie, ze dane pobierane są normalnie z dysku a nie z URL.
Gdyby dane byly pobierane z URL, to wtedy jak najbardziej zostanie zwrocony wynik dzialania pliku php a nie jego zawartosc.

Napisany przez: trueblue 9.05.2014, 11:23:42

Dlatego też pytałem czy ścieżka do pliku jest poprawna.

Napisany przez: nospor 9.05.2014, 11:49:21

No wlasnie... pytasz o sciezke.... powinienies pytac o adres URL smile.gif

Napisany przez: arpi 9.05.2014, 20:49:35

Dokładnie to jest tak, że tworzę skrypt który pobierze dane z zewnętrznego serwera
przykładowo www.xyz-hurtownia.pl/cennik.php.

Na potrzeby wpisu na forum uprościłem temat i stworzyłem testowe pliki na serwerze na którym mam stronę www.

Rozumiem, że funkcja
simplexml_load_file("xml.php");
nie pobiera wyniku działania dlatego ten błąd.

A jeśli wpiszę w ścieżce adres url to skrypt powinien wykonać się poprawnie ? Trochę to dziwne :/


Czy istnieje w takim razie inne polecenie do pobrania pliku xml generowanego w locie z php (z pliku lokalnego) ?

Napisany przez: Pyton_000 9.05.2014, 22:46:21

Spróbuj tego

  1. $file = http://www.php.net/file_get_contents('/path/to/file.php');
  2. $xhtml = http://www.php.net/eval("?>$file");

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)