проверьте правильность URL или нет и действительный XML в php - PullRequest
3 голосов
/ 07 ноября 2011

Я хочу прочитать RSS-канал и сохранить его. Для этого я использую: -

<?php
$homepage = file_get_contents('http://www.forbes.com/news/index.xml');
 $xml = simplexml_load_string($homepage);
 echo '<pre>';
 print_r($xml);
 ?>

, но сначала я хочу проверить

1.URL действителен илинет, означает, что если время его ответа

   $homepage = file_get_contents('http://www.forbes.com/news/index.xml');

меньше 1 минуты и URL-адрес правильный

2. Затем проверьте файл (http://www.forbes.com/news/index.xml) содержит действительные данные XML илинет. если действительный XML, то показать время ответа, иначе показать ошибку.

answer МОЙ ВОПРОС:

Спасибо всем за помощь и предложение. Я решил эту проблему. Для этого я написал этот код

  <?php
 // function() for valid XML or not
 function XmlIsWellFormed($xmlContent, $message) {
libxml_use_internal_errors(true);

$doc = new DOMDocument('1.0', 'utf-8');
$doc->loadXML($xmlContent);

$errors = libxml_get_errors();
if (empty($errors))
{
    return true;
}

$error = $errors[ 0 ];
if ($error->level < 3)
{
    return true;
}

$lines = explode("r", $xmlContent);
$line = $lines[($error->line)-1];

$message = $error->message . ' at line ' . $error->line . ': ' . htmlentities($line);

return false;
 }
   //function() for checking URL is valid or not
  function Visit($url){
   $agent = $ch=curl_init();
   curl_setopt ($ch, CURLOPT_URL,$url );
   curl_setopt($ch, CURLOPT_USERAGENT, $agent);
   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt ($ch,CURLOPT_VERBOSE,false);
   curl_setopt($ch, CURLOPT_TIMEOUT, 60);
   curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE);
   curl_setopt($ch,CURLOPT_SSLVERSION,3);
   curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE);
   $page=curl_exec($ch);
   //echo curl_error($ch);
   $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
   curl_close($ch);
   if($httpcode>=200 && $httpcode<300) return true;
   else return false;
  }
         $url='http://www.forbes.com/news/index.xml';
         if (Visit($url)){
   $xmlContent = file_get_contents($url);

      $errorMessage = '';
      if (XmlIsWellFormed($xmlContent, $errorMessage)) {
      echo 'xml is valid';
        $xml = simplexml_load_string($xmlContent);
        echo '<pre>';
        print_r($xml);
      }

     }



 ?>

Ответы [ 3 ]

4 голосов
/ 07 ноября 2011

Если URL-адрес недействителен, file_get_contents потерпит неудачу.

Чтобы проверить, действителен ли xml

simplexml_load_string(file_get_contents('http://www.forbes.com/news/index.xml'))

Это вернет true, если его, и полностью провалится, если его нет't.

 if(simplexml_load_string(file_get_contents('http://www.forbes.com/news/index.xml'))){

        echo "yeah";
    }else { echo "nah";}
1 голос
/ 07 ноября 2011
if (!filter_var('anyurl',FILTER_VALIDATE_URL))
 echo "Wrong url";
end;

http://php.net/manual/en/filter.filters.validate.php

1 голос
/ 07 ноября 2011

Эта страница содержит фрагмент с валидатором для URL с использованием регулярных выражений.Функция и использование:

function isValidURL($url)
{
     return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}

if(!isValidURL($fldbanner_url))
{
    $errMsg .= "* Please enter valid URL including http://<br>";
}
...