文档对象模型函数,用于从数据库中获取一系列链接并逐个处理它们

时间:2011-06-16 14:03:00

标签: php domdocument

我一直在尝试对我正在尝试构建的程序进行故障排除,并且我已经设法找出导致问题的原因,但要修复它我没有成功。

我正在使用php中的文档对象模型函数来从数据库中获取一系列链接并逐个处理它们,但是它似乎在@ $ doc-> loadHTMLFile(“$ alllinks”)中; line该函数接受数据库中的数组值存在问题。

然而,令我感到困惑的是,如果我创建一个通用数组,它可以工作,但是从数据库(或其他一些方法)它只是失败。

这是适用的版本:

<?php session_start();


// EDIT: Use a custom function to do the
// reverse of SORT_NUMERIC with asort
function height_compare($a1, $b1)
{
    if ($a1 == $b1) {
        return 0;
    }
    return ($a1 > $b1) ? -1 : 1;
}

$all_links = array('http://example.com/klvvobj','http://example.net/s/109228626');

foreach($all_links as $alllinks){
$doc = new DOMDocument();
// Okay this is HTML is kind of screwy
// So we're going to suppress errors
@$doc->loadHTMLFile("$alllinks");

// Get all images
$images_list = $doc->getElementsByTagName('img');

$images = array();
foreach($images_list as $image) {

  // Get the src attribute
  $image_source = $image->getAttribute('src');

  if (substr($image_source,0,7)=="http://"){
  $image_size_info = getimagesize($image_source);

  $images[$image_source] = $image_size_info[1];
  print_r($images);
  }
}


// Do a numeric sort on the height
uasort($images, "height_compare");
$tallest_image = array_slice($images, 0,1);
$mainimg = key($tallest_image);

echo "<img src='$mainimg' />";

}
print_r($images);

?> 

这是失败的版本:

<?php session_start();

include 'functions.php';

$query = mysql_query("SELECT * FROM links");

        function height_compare($a1, $b1)
{
    if ($a1 == $b1) {
        return 0;
    }
    return ($a1 > $b1) ? -1 : 1;
}

while($result = mysql_fetch_array($query)) {
$link = $result['link'];
$doc = new DOMDocument();

// Okay this is HTML is kind of screwy
// So we're going to suppress errors
@$doc->loadHTMLFile($link);

// Get all images
$images_list = $doc->getElementsByTagName('img');

$images = array();
foreach($images_list as $image) {

  // Get the src attribute
  $image_source = $image->getAttribute('src');

  if (substr($image_source,0,7)=="http://"){
  $image_size_info = getimagesize($image_source);

  $images[$image_source] = $image_size_info[1];
  print_r($images);
  }
}


// Do a numeric sort on the height
uasort($images, "height_compare");
$tallest_image = array_slice($images, 0,1);
$mainimg = key($tallest_image);

echo "<img src='$mainimg' />";

}

                     echo '<a href="logout.php">Log out</a>';

?>

1 个答案:

答案 0 :(得分:2)

使用:

@$doc->loadHTMLFile("'$link'");

即使$link包含正确/可读的地址,结果也会如下:

@$doc->loadHTMLFile("'http://...'");

'http://...'不是正确的地址。

(参见'

将其更改为:

@$doc->loadHTMLFile($link);


此外,请不要使用@来缓解错误:使用

libxml_use_internal_errors(true);

libxml_get_errors();

处理有问题的xml / html时。见http://php.net/manual/function.libxml-use-internal-errors.php


另外一个补充:

你不需要排序的东西。如果你只想要“最高的图像”使用:

$mainimg = array_search(max($images), $images);