2011-11-07 99 views
3

我想讀一個RSS提要,並儲存it.for這個我米使用: -檢查網址是否有效,並在PHP有效的XML

<?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.然後檢查File(http://www.forbes.com/news/index.xml)是否有有效的XML數據。 如果有效的XML則顯示響應時間,否則顯示錯誤。

回答我的問題:

感謝大家對你的幫助和suggestion.I解決了這個問題。爲了這個,我寫了這個代碼

<?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); 
     } 

    } 



?> 

回答

4

如果url無效file_get_contents會失敗。

要檢查是否XML是有效的

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

都將返回true,如果它,如果它不將完全失敗。

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

     echo "yeah"; 
    }else { echo "nah";} 
+0

謝謝,您guideness .... – omnath

1

page具有對使用正則表達式的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>"; 
}