, Önbellek tut ve PHP uzak bir XML beslemesini, doğrulama denetimleri ayrıştırmak

3 Cevap php

Şu anda, ben uzak bir sitenin XML beslemesini kapma ve PHP ayrıştırılması benim sunucuda yerel bir kopyasını saklıyorum.

Sorun böylece feed.xml kullanırsanız nasıl feed.xml dosyanın geçerli olup olmadığını görmek için PHP bazı kontrolleri ekleme hakkında gitmek ve yapmak olduğunu.

Hataları (ki bazen uzaktan XML feed somes boş feed.xml gösterilecek) ile geçersiz Ve eğer, bir önceki kepçeyi feed.xml yedek geçerli bir kopyasını hizmet / kaydetmek?

kod kapma feed.xml

<?php
/**
* Initialize the cURL session
*/
$ch = curl_init();
/**
* Set the URL of the page or file to download.
*/
curl_setopt($ch, CURLOPT_URL,
'http://domain.com/feed.xml');
/**
* Create a new file
*/
$fp = fopen('feed.xml', 'w');
/**
* Ask cURL to write the contents to a file
*/
curl_setopt($ch, CURLOPT_FILE, $fp);
/**
* Execute the cURL session
*/
curl_exec ($ch);
/**
* Close cURL session and file
*/
curl_close ($ch);
fclose($fp);
?>

şimdiye kadar sadece bunu yüklemek için bu var

$xml = @simplexml_load_file('feed.xml') or die("feed not loading");

teşekkürler

3 Cevap

O kıvırmak dosyasına doğrudan yazmalı pricipial değilse, o zaman yeniden yazma yerel feed.xml önce XML kontrol edebilir:

<?php
/**
* Initialize the cURL session
*/
$ch = curl_init();
/**
* Set the URL of the page or file to download.
*/
curl_setopt($ch, CURLOPT_URL, 'http://domain.com/feed.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec ($ch);
curl_close ($ch);
if (@simplexml_load_string($xml)) {
    /**
    * Create a new file
    */
    $fp = fopen('feed.xml', 'w');
    fwrite($fp, $xml);
    fclose($fp);
}

?>

Bu nasıl? Eğer sadece bir belge almak gerekiyorsa curl kullanmak gerek yok.

$feed = simplexml_load_file('http://domain.com/feed.xml');

if ($feed)
{
    // $feed is valid, save it
    $feed->asXML('feed.xml');
}
elseif (file_exists('feed.xml'))
{
    // $feed is not valid, grab the last backup
    $feed = simplexml_load_file('feed.xml');
}
else
{
    die('No available feed');
}

Ben araya bir sınıfta, ben zamanında yanıt eğer uzaktan dosya varsa ve eğer denetleyen bir işlevi vardır:

/**
* Check to see if remote feed exists and responding in a timely manner
*/
private function remote_file_exists($url) {
  $ret = false;
  $ch = curl_init($url);

  curl_setopt($ch, CURLOPT_NOBODY, true); // check the connection; return no content
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); // timeout after 1 second
  curl_setopt($ch, CURLOPT_TIMEOUT, 2); // The maximum number of seconds to allow cURL functions to execute.
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; da; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11');

  // do request
  $result = curl_exec($ch);

  // if request is successful
  if ($result === true) {
    $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($statusCode === 200) {
      $ret = true;
    }
  }
  curl_close($ch);

  return $ret;
}

Tüm sınıf hep birlikte çalışmak için bir şey olduğundan emin olmak için sonbaharda geri kodunu içerir.

Tam bir sınıf açıklayan blog yazısı burada: http://weedygarden.net/2012/04/simple-feed-caching-with-php/

Kod burada: https://github.com/erunyon/FeedCache