Preluare XML de pe alt server

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
alexinio3d
Mesaje:96

Preluare XML de pe alt server

Salutare .
As vrea sa ma folosesc de un xml indepartat ( adica de pe alt server ) ca sal pot folosi in scriptul meu, dar nustiu cum sa fac sa functioneze .
Am incercat cu :

Cod: Selectaţi tot

<?php
$feed = file_get_contents('http://radio25.treisute.ro:5582/stats?sid=1&pass=dENL84TnVF8H705NyNvB');
$xml = simplexml_load_string($feed);
print_r($xml);
?>
, dar numi merge . Imi da urmatoarea eroare :

Cod: Selectaţi tot

[04-Jun-2014 09:07:06 Europe/Helsinki] PHP Warning:  file_get_contents(http://radio25.treisute.ro:5582/stats?sid=1&pass=dENL84TnVF8H705NyNvB): failed to open stream: Connection timed out in /home/********/public_html/**********/testverificare.php on line 2
Siteuri create / configurate de mine :
SilvoProject.Ro ( Magazin Online ) : SilvoProject.Ro
TreiSute.Ro ( Comunitate de gaming ) : TreiSute.Ro

MarPlo Mesaje:4343
Salut
Probabil ca acel server are blocat accesul la pagini externe cu file_get_contents(). Inceara direct cu simplexml_load_file():

Cod: Selectaţi tot

$xml = simplexml_load_file('Adresa_Pagina');
print_r($xml);
 
Sau, indicat cu cURL.
Pe localhost, cu XAMPP, a functionat.

Cod: Selectaţi tot

// cUrl to get content from external page ( https://coursesweb.net/ )
function getPage($url) {
  // Browser agents
  $agents = array('Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)', 'Opera/9.63 (Windows NT 6.0; U; ru) Presto/2.1.1', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5');

  // adds headers data
  $curl_header = array('text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'Connection: keep-alive', 'Keep-Alive: 84600', 'Content-Type: text/html;charset=UTF-8');

  if($ch = curl_init()) {
    curl_setopt($ch, CURLOPT_USERAGENT, array_rand($agents, 1));
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_header); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300);
    curl_setopt($ch, CURLOPT_TIMEOUT, 84600);
    curl_setopt($ch, CURLOPT_NOSIGNAL, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
    curl_setopt($ch, CURLOPT_URL, $url);
    $str = curl_exec($ch);
    curl_close($ch);

    return utf8_decode($str);
  }
  else return 'Unable to use CURL on this server';
}

$feed = getPage('Adresa_Pagina');
$xml = simplexml_load_string($feed);
print_r($xml);
 

alexinio3d Mesaje:96
Nu merge.
Tot mi se incarca si numi da nici un rezultat.
Am copiat si tot codul care mi lai dat tu si nici asa numi merge, iar de primit vreo eroare nu primesc.
Poate fii si de la hostul meu ?? :-?
Siteuri create / configurate de mine :
SilvoProject.Ro ( Magazin Online ) : SilvoProject.Ro
TreiSute.Ro ( Comunitate de gaming ) : TreiSute.Ro

MarPlo Mesaje:4343
Incearca si pe localhost, pe calculatorul tau. La mine a mers si codul postat de tine, si cel cu cUrl.
Probabil e de la hosting, au blocat accesul extern la alte pagini prin php.

Ca alternativa la file_get_contents() si cUrl e functia stream_context_create() , dar daca au blocat accesul la pagini de pe alt server prin php, e posibil ca nici asta sa nu functioneze.
Oricum, ca exemplu:

Cod: Selectaţi tot

function postRequest($url, $data='', $optional_headers = null) {
  // https://coursesweb.net/
  $params = array('http' => array('method' => 'GET', 'content' => $data));
  if($optional_headers !== null) $params['http']['header'] = $optional_headers;
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  if(!$fp) throw new Exception("Problem with $url, $php_errormsg");
  $response = @stream_get_contents($fp);
  if($response === false) throw new Exception("Problem reading data from $url, $php_errormsg");

  return $response;
}
 
// Send a request
$result = postRequest('Adresa_Pagina');

echo htmlentities($result);     // output result