【问题标题】:PHP: Reduce load of function that gets <title> content from external resourcePHP:减少从外部资源获取 <title> 内容的函数负载
【发布时间】:2013-12-27 23:50:32
【问题描述】:

我创建了一个函数来检查外部页面的&lt;title&gt; 标记是否包含特定单词(在标题的其他单词之间)。如果检查是肯定的,它应该回显(整个)页面&lt;title&gt;

<?php

function file_get_contents_curl($url)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

$html = file_get_contents_curl("http://www.lastfm.it/user/lorenzone92/now");

$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');

$title = $nodes->item(0)->nodeValue;

if (strpos($title,'in ascolto') !== false) {
echo "$title". '<br>';
}

?>

它工作正常。我担心的是内存消耗和服务器负载。问题是我无法缓存 $html 因为它是一个活的东西..有什么想法吗?我是否需要抓取整个页面才能访问&lt;title&gt;?其他方法而不是 cURL 和 file_get_contents 来减少服务器负载?还是我太担心了..? :)

注意:不要担心 PHP 版本(没有限制,我在我的 VPS 上安装了 PHP 5.5.7 :D)。

【问题讨论】:

  • 我不确定,但我认为您的问题没有解决方案。

标签: php optimization curl memory-consumption server-load


【解决方案1】:

我不知道它是否有帮助...但是这个其他问题(似乎与您的问题有关)似乎有很多答案...这里是链接

Get title of website via link

【讨论】:

  • 其他问题的链接应该在 cmets 中
  • 对不起,还没有读到这个。_。我不会再这样做了。
【解决方案2】:

我猜你必须加载整个页面。您不知道标题标签的位置和长度,因此您无法阅读例如前 1000 个字符。我不知道您尝试同时加载多少页,但您不会加载图像和 css 文件之类的整个媒体数据,因此您解析的 HTML 代码不应太大。

【讨论】:

    【解决方案3】:

    我只加载网站一部分的简单方法是Range 标头:

    Range:  bytes=0-499
    

    如果服务器支持 Range 标头,它只返回前 500 个字节。不幸的是,这会破坏页面的标记,在使用DOMDocument 时可能会导致错误。另一方面,当您只需要一个 HTML 元素的内容时,使用 DOMDocument 可能不是最好的主意。我建议使用简单的正则表达式或基本字符串函数。

    【讨论】:

    • 感谢您的回复!为什么会导致 DOMDocument 出错?
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多