使用simplexml_load_file从tumblr拉出 - 每次都超时

时间:2011-05-11 05:19:48

标签: php performance simplexml tumblr

我的网站加载时间约为45秒。这是因为我从tumblr中提取了一些XML,但我无法弄清楚这是否是我的服务器故障,tumblr的错误或其他因素。我可以让这个脚本在5秒内超时并回显'tumblr';而不是在近一分钟后超时?

我收到了这个错误:

  

警告:simplexml_load_file(http://blog.yaytalent.com/api/read?type=post&start=1&num=2)[function.simplexml-load-file]:无法打开流:连接定时在第86行的/nfs/c08/h02/mnt/122191/domains/yaytalent.com/html/index.php中

     

警告:simplexml_load_file()[function.simplexml-load-file]:I / O警告:无法加载外部实体“http://blog.yaytalent.com/api/read?type=post&start=1& ;在第86行的/nfs/c08/h02/mnt/122191/domains/yaytalent.com/html/index.php中; num = 2“

使用此代码:

<?php
$request_url = "http://blog.yaytalent.com/api/read?type=post&start=1&num=2";
$xml = simplexml_load_file($request_url);
$title = $xml->posts->post->{'regular-title'};
$post = $xml->posts->post->{'regular-body'};
$link = $xml->posts->post['url'];
$small_post = substr($post,0,270);
echo "<h2><a target=frame2 href='".$link."'>$title</a></h2>";
echo "<p>$small_post... <a target=frame2 href='$link'>Read More</a></p>";
?>

3 个答案:

答案 0 :(得分:1)

好的,在这种情况下我建议你使用cUrl

这样你可以设置超时,如果页面在五秒内没有响应,你可以继续。 Documentation

            $url = "http://blog.yaytalent.com/api/read?type=post&start=1&num=2";
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_URL, $url); 
            curl_setopt($ch, CURLOPT_HEADER, FALSE); 
            curl_setopt($ch, CURLOPT_NOBODY, FALSE); 
            curl_setopt($s,CURLOPT_TIMEOUT,5); // TIME OUT is 5 seconds
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
            $response = curl_exec($ch); 
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
            curl_close($ch); 

我希望这对你有用,并且对你的学习很有帮助

<强>更新

现在您可以像这样使用简单的xml:

$xml = simplexml_load_string($response);

答案 1 :(得分:0)

  

您也可以这样做:

function simplexml_load_file_from_url($url, $timeout = 20){

  $context = array('http' => array('timeout' => (int)$timeout));

  $data = file_get_contents($url, false, stream_context_create($context));

  if(!$data){
    trigger_error('Cannot load data from url: ' . $url, E_USER_NOTICE);
    return false;
  }

  return simplexml_load_string($data);
}  

答案 2 :(得分:0)

curl_setopt(**$s**,CURLOPT_TIMEOUT,5);

我觉得Ibu的回复应该是$ ch。但无论如何都是好榜样!谢谢!