Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > XML сохранить как TXT


Автор: shurik86 19.2.2008, 04:17
У меня проблема такая, есть файл *.nfo (информация о системе) он в формате XML.
Для вывода на экран я воспользовался парсером.
Но, мне необходимо в этом файле найти определенные слова которые находятся в масиве.
Поиск по XML файлу упорно производить не хочет smile , пробовал его сохранять как *.txt после парсера, но эффект тот же.

Вот код самого поиска

Код

<?php
$arr=array (1 =>"Norton Internet Security" , 2 =>"NOD32", 3 =>"AVG", 4 =>"Spybot" );
$file = fopen("H:\\diplom\\system.nfo", "r");
  $filename="H:\\diplom\\system.nfo";
  $list=fread($file, filesize($filename));  
  foreach ($arr as $value){
   $compet = stripos ($list, $value);
   if ($compet!==false) {
   if ($value==Spybot) echo ('Attention!!! Spybot have installed on system <br>');
   //   echo $value;
   }
   echo "<br>";

?>


А вот сам вопрос.
Можно ли както сохранить *.nfo (информация о системе) как Текстовый файл, или может использовать какую-то другую функцию для поиска.

Всем спасибо за любую инфу. smile 

С ув. Shurik

Автор: patience 19.2.2008, 09:50
Цитата(shurik86 @  19.2.2008,  04:17 Найти цитируемый пост)
Для вывода на экран я воспользовался парсером.


Почему бы не выяснить содержит ли документ нужный вам текст во время парсинга, можно также попробовать поискать используя
xpath (если видна структура документа)
http://www.php.net/manual/ru/ref.dom.php
http://www.php.net/manual/ru/ref.simplexml.php


Код

$arr=array (1 =>"Norton Internet Security" , 2 =>"NOD32", 3 =>"AVG", 4 =>"Spybot" );
...
 if ($value==Spybot)

Кавычки "Spybot"

ИМХО, сохранять хмл в текст это так сказать не очень есть хорошо )) (текст в текст)

Автор: awers 20.2.2008, 02:22
а как на счет 
Код

$file_data = file_get_contents('file.ifo');
$arr=array ("Norton Internet Security" , "NOD32", "AVG", "Spybot" );
foreach($arr as $needle){
if (preg_match("!$needle!si",$file_data)) die('Installed: '.$needle); 
}


вроде так... ну на скорую руку

Автор: shurik86 4.3.2008, 15:25
Цитата

Почему бы не выяснить содержит ли документ нужный вам текст во время парсинга


пробовал так именно с самого начала, не нашло (((


Цитата

можно также попробовать поискать используя xpath (если видна структура документа)


надо попробывать посмотреть ))

Цитата

а как на счет код PHP
$file_data = file_get_contents('file.ifo');
$arr=array ("Norton Internet Security" , "NOD32", "AVG", "Spybot" );
foreach($arr as $needle){
if (preg_match("!$needle!si",$file_data)) die('Installed: '.$needle); 

}


вроде так... ну на скорую руку


к сожалению тоже не помогло ((((


Автор: awers 5.3.2008, 15:03
shurik86, содержимое файла в студию

Автор: shurik86 2.4.2008, 17:28
awers тебе нужно сожержимое nfo ? в котором произодится поиск?
Или я чет не так понял? ))) smile 

Автор: mishaSL 2.4.2008, 18:05
shurik86, ты правильно понял. Нужно содержимое XML файла и словестное описание того что надо найти. 

Автор: shurik86 4.4.2008, 21:19
Я приатачил файл sys.rar в нем находится файл sys.nfo это собственно тот файл к котором надо и совершить поиск.
В данном примере (файле) содержится слово NOD32 вот его то мне и надо найти. 

Буду очень признателен если ктото сможет мне с этим помочь smile


ЗЫ. и еще вопросик
Как боротся вот с этим 

"Warning: fread(): supplied argument is not a valid stream resource in C:\Server\www\adminpage.php on line 61  "

код в котором ошибка

Код

while ($data=fread($fp, 10240))




Спасибо!! С ув. Shurik smile

Автор: Fortop 27.4.2008, 14:31
shurik86,  у тебя кодировка файла UTF-8. А значит и работать с ним надо через http://ua.php.net/manual/ru/ref.mbstring.php

Поскольку сам ты код пишешь не в UTF-8, то для начала
каждую строку в массиве, надо сконвертировать в UTF-8

Код

$arr=array (1 =>"Norton Internet Security" , 2 =>"NOD32", 3 =>"AVG", 4 =>"Spybot" );


вот примерно так 

Код

iconv("ISO-8859-1", "UTF-8", "This is a test.");


А потом уже можешь использовать MB функции для поиска

Добавлено через 4 минуты и 55 секунд
P.S. Из 4х приведеных тобой значений в файле есть только NOD32

Автор: shurik86 14.5.2008, 00:16
Fortop спасибо, пробую

Я нашел в MB-функциях аналогичную функцию stripos  -  mb_stripos.  Поидее она должна работать, вот щас чтото пытаюсь перекодировать мой массив в UTF-8.

Но чтото безрезультатно, всеравно почемуто ненаходит ((( может и я чтото не так делаю  smile  smile 

Код

<?php

$arr=array (1 =>"Norton Internet Security" , 2 =>"NOD32", 3 =>"AVG", 4 =>"Spybot" );
$file = fopen("C:\\Temp\\sys.nfo", "r");
  $filename="C:\\Temp\\sys.nfo";
  $list=fread($file, filesize($filename));  
  foreach ($arr as $value){
    $value=iconv("ISO-8859-5", "UTF-8", "Test");
    $compet = mb_stripos ($list, $value);
    if ($compet!==false) {
    if ($value==Spybot) echo ('Attention!!! Spybot have installed on system <br>');
    if ($value=='Norton Internet Security') echo ('Attention!!! Norton Internet Security have installed on system <br>');
    if ($value==NOD32) echo ('Attention!!! NOD32 have installed on system <br>');
    if ($value==AVG) echo ('Attention!!! AVG have installed on system <br>');
    //    echo $value;
    }
    echo "<br>";
}
?>
      

Автор: Fortop 17.5.2008, 13:57
Цитата(shurik86 @  14.5.2008,  00:16 Найти цитируемый пост)
Но чтото безрезультатно, всеравно почемуто ненаходит ((( может и я чтото не так делаю


Потому что вертолет.
Код

    var_dump(mb_detect_encoding($list));


Лень мне возится.
Вот так работает.
Код

<?php
$arr=array (1 =>"Norton Internet Security" , 2 =>"NOD32", 3 =>"AVG", 4 =>"Spybot" );
    $list = file_get_contents("C:\\Temp\\sys.nfo");
    $dom = new DomDocument();
    $dom->load("C:\\Temp\\sys.nfo");
    $r = $dom->getElementsByTagName('Value');
    foreach ($arr as $value) {
        foreach ($r as $n) {
            if (false !== stripos($n->nodeValue, $value)) {
                echo 'FOUND = ' . $value . '<br>';
                break;
            }
        }
    }

Автор: shurik86 17.5.2008, 23:57
Fortop спасибо большое, работает  smile 

Автор: IZ@TOP 22.5.2008, 12:11
Блин, ребят, все куда проще. Конвертить ISO вообще не нужно, в принципе - если там нет символов отличных от латиницы.

Код

<?php

$file = 'path/to/file';
$haystack = array("norton", "nod32", "spybot");
if(preg_match_all("/(?<found>" . implode('|', $haystack) . ")/uis", file_get_contents($file), $matches)) {
   echo "Found: ";
   foreach ( $matches['found'] as $found) { echo "$found,"; }
} else {
   echo "Not found";
}

?>


Добавлено через 2 минуты и 21 секунду
Хотя лучше конечно проверять с помощью соответствующих средств (DOM, SimpleXML). И куда проще будет, скорее всего, использовать XPath.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)