0

「/var/www/cal/attach/」ディレクトリ内に複数のファイルがある場合、最初のファイルから要素を何度も抽出するだけのようです。これを適切に機能させるには、どうにかして要素をクリアする必要がありますか? 私がやろうとしているのは、スクリプトに複数の *.htm ファイルを通過させ、ファイルからのデータを解析して、後で呼び出すことができる $value[x] にすることです。しかし、同じ値が複数のファイルに表示されます...何が問題なのですか?

<?php
error_reporting(0);

$today = date("Y-m-d");

foreach (glob("/var/www/cal/attach/*.htm") as $filename) {
$file = $DOCUMENT_ROOT. "$filename";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);


$elements = $doc->getElementsByTagName('td');
if (!is_null($elements)) {
  foreach ($elements as $element) {
    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
        $value[] = $node->nodeValue. "\n";
    }
  }
}
echo "date,test,response time,availability,$filename\n";
echo $today . "," . trim($value[25]) . "," . trim($value[26]) . "," . trim($value[27]) . "\n";
echo $today . "," . trim($value[31]) . "," . trim($value[32]) . "," . trim($value[33]) . "\n";
echo $today . "," . trim($value[37]) . "," . trim($value[38]) . "," . trim($value[39]) . "\n";

}

?>
4

1 に答える 1

0

SPLのディレクトリイテレータオブジェクトを使用することをお勧めします。以下の例では再帰的なものを使用していますが、再帰的である必要はありません。

$dir_iterator = new RecursiveDirectoryIterator("/path");
$iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
// could use CHILD_FIRST if you so wish


$size = 0;
foreach ($iterator as $file) {
    if ($file->isFile()) {
        echo substr($file->getPathname(), 27) . ": " . $file->getSize() . " B;        modified " . date("Y-m-d", $file->getMTime()) . "\n";
         $size += $file->getSize();
    }
}

 echo "\nTotal file size: ", $size, " bytes\n";
于 2009-09-09T14:12:49.637 に答える