Помогите найти ошибку в скрипте
Скрипт производит обработку xml документа, таким образом, что удаляет статьи, названия которых начинаются с ненужных ключевых слов (Файл:, Изображение:, Mediawiki: и Википедия: ), а потом добавляет в статью ссылку на оригинальную статью в Википедии. Рабочий скрипт, но проблема в том что удаляются и некоторые статьи не содержащие в титле ключевых слов. Не могу понять закономерность. Меняю местами статьи в обрабатываемом файле и удаляются разные статьи.
Вот скрипт
<?php
// Устанавливаем не ограниченное время выполнения скрипта
set_time_limit(0);
// Открываем дамп
$fd = fopen("dump.txt", "rb");
if(!$fd) exit("Файл отсутствует");
// Открываем файл для разультата
$fp = fopen("result.txt", "a");
if(!$fp) exit("Нет возможности создать файл назначения");
// Флаги состоянния
$found_page = false;
$found_title = false;
$found_article = false;
$title = "";
$article = "";
$arr = array("Файл:", "Изображение:", "Mediawiki:", "Википедия:");
// Построчно анализируем файл
while($line = fgets($fd, 10000))
{
if(!$found_page)
{
// Начало новой статьи пока не найдено
if(stripos($line, "<page>") !== false)
{
$found_page = true;
$title = "";
$article = "";
}
}
else
{
// Начало статьи найдено
if(!$found_title)
{
if(stripos($line, "<title>") !== false)
{
// Найден заголовок
$found_title = true;
// Извлекаем названия
$pattern = "|<title>(.*?)</title>|is";
if(preg_match($pattern, $line, $out))
{
$title = $out[1];
// Игнорируем "Файл:", "Изображение:", "Mediawiki:", "Википедия:"
foreach($arr as $word)
{
if(stripos($line, $word) !== false)
{
$found_page = false;
$found_title = false;
}
}
}
}
}
else
{
if(!$found_article)
{
if(stripos($line, "<text") !== false)
{
$found_article = true;
$article .= $line;
}
}
else
{
$article .= $line;
if(stripos($line, "</text>") !== false)
{
$found_page = false;
$found_title = false;
$found_article = false;
// Оставляем запись в файле назначения
$pattern = "|<text[^>]+>(.*?)</text>|is";
if(preg_match($pattern, $article, $out))
{
fwrite($fp, "<page>
<title>".$title."</title>
<id>380248</id>
<revision>
<id>2097005</id>
<timestamp>2008-12-16T14:07:23Z</timestamp>
<contributor>
<username>mp_petrol</username>
<id>9835</id>
</contributor>
<minor />
<comment>Комментарий</comment>
<text xml:space=\"preserve\">{{Оригинал статьи|httр://ru.wikipedia.org/wiki/".rawurlencode($title).
"}} $out[1]</text></revision>
</page>\r\n"); }
}
}
}
}
}
// Закрываем файлы
fclose($fd);
fclose($fp);
?>
А вот структура xml дампа русской Википедии
<page>
<title>Заголовок</title><id>380248</id><revision><id>2097005</id><timestamp>2008-12-16T14:07:23Z</timestamp><contributor><username>User</username><id>9835</id></contributor><minor /><comment>Комментарий</comment>
<text xml:space="preserve">Текст статьи с вики разметкой</text></revision>
</page>
Помогите, ПОЖАЛУЙСТА!
Примечание:
<?php
// Устанавливаем не ограниченное время выполнения скрипта
set_time_limit(0);
// Открываем дамп
$fd = fopen("dump.txt", "rb");
if(!$fd) exit("Файл отсутствует");
// Открываем файл для разультата
$fp = fopen("result.txt", "a");
if(!$fp) exit("Не возможности создать файл назначения");
// Флаги состоянния
$found_page = false;
$found_title = false;
$found_article = false;
$title = "";
$article = "";
$arr = array("Файл:", "Изображение:", "Mediawiki:", "Википедия:");
// Построчно анализируем файл
while($line = fgets($fd, 10000))
{
if(!$found_page)
{
// Начало новой статьи пока не найдено
if(stripos($line, "<page>") !== false)
{
$found_page = true;
$title = "";
$article = "";
}
}
else
{
// Начало статьи найдено
if(!$found_title)
{
if(stripos($line, "<title>") !== false)
{
// Найден заголовок
$found_title = true;
// Извлекаем названия
$pattern = "|<title>(.*?)</title>|is";
if(preg_match($pattern, $line, $out))
{
$title = $out[1];
// Игнорируем "Файл:", "Изображение:", "Mediawiki:", "Википедия:"
foreach($arr as $word)
{
if(stripos($line, $word) !== false)
{
$found_page = false;
$found_title = false;
}
}
}
}
}
else
{
if(!$found_article)
{
if(stripos($line, "<text") !== false)
{
$found_article = true;
$article .= $line;
}
}
else
{
$article .= $line;
if(stripos($line, "</text>") !== false)
{
$found_page = false;
$found_title = false;
$found_article = false;
// Оставляем запись в файле назначения
$pattern = "|<text[^>]+>(.*?)</text>|is";
if(preg_match($pattern, $article, $out))
{
fwrite($fp, "<page>
<title>".$title."</title>
<id>380248</id>
<revision>
<id>2097005</id>
<timestamp>2005-01-14T19:08:01Z</timestamp>
<contributor>
<username>Максипедія</username>
<id>9835</id>
</contributor>
<minor />
<comment>Перекладено в Максипедії</comment>
<text xml:space=\"preserve\"><noinclude>{{Оригінал статті|httр://maxipedia.net/ru/www/".rawurlencode($title)."}}</noinclude>
$out[1]</text>
</revision>
</page>\r\n");
}
}
}
}
}
}
// Закрываем файлы
fclose($fd);
fclose($fp);
?>
Примечание:
Японский Городовой прав. Кто нибудь отладить может?