Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск тегов xml-файле
 
 автор: simbel   (06.08.2009 в 15:32)   письмо автору
 
 

Здравствуйте. Требуется помощь профессионалов.

Есть скрипт который ежедненвно скачивает десятки xml файлов со стороннего сервера. Часто бывает так что некоторые файлы скачивается не полностью и при последующей обработке даннных выдаётся ошибка.

Я решил написать дополнительный скрипт для проверки файла. Идея такая проверить наличие определённых тегов которые должны находиться в конце файла.

Знаю только один способ - регулярные выражения - такой скрипт сделал, но он рабтает медленно (перебирает файл с самого начала) - файлы довольно большие и их много. Попробовал по другому, почти тоже что и с регулярными выражениями:
  
    $inp = fopen('/home/prosto/www/mon.plx','r');
        while($line = fgets($inp, 1024)){
        if(strrpos($line, '</offer></offers></shop>')) break;
        else $gh=false;
        }


Но функция strrpos() не находит теги, ищет только текст - наверное этот скрипт работал бы быстрее чем регулярки, но не могу придумать, чего в нём не хватает, что бы он видел теги.

И ещё такой вопросик, можно ли как-то сделать так ,что бы не перебирать весь xml файл, а проверить только несколь строк в конце на наличие нужных тегов?

Возможно всё гораздо проще и есть какой-то другой способ - намекните пожалуйста если что ))).

Буду очень благодарен за помощь.

  Ответить  
 
 автор: Trianon   (06.08.2009 в 15:50)   письмо автору
 
   для: simbel   (06.08.2009 в 15:32)
 

fseek(.. -100, SEEK_END)

  Ответить  
 
 автор: simbel   (06.08.2009 в 18:22)   письмо автору
 
   для: Trianon   (06.08.2009 в 15:50)
 

Спасибо за подсказку - судя по всему эта функция как раз то что нужно. Только почему то она у меня не работает. На каком-то форуме нашёл тестовый скриптик:

$f = fopen("/home/prostor/www/robots.txt", "r");
$offset = 100;
$test = fseek($f, $offset);

if (-1 == $test) 
  print "Невозможно сместить указатель в файле на такое количество байт.";
else
  echo 'всё ок';

При таких параметрах функции fseek() - "всё ок".

Как только в функцию
fseek($f, ..., $offset);
подставляю один из специфицированной параметров SEEK_SET, SEEK_CUR, SEEK_END - "Невозможно сместить указатель в файле на такое количество байт."

С чем это может быть связано? Как исправить? Подажите пожалуйста.

  Ответить  
 
 автор: ......   (06.08.2009 в 18:45)
 
   для: simbel   (06.08.2009 в 18:22)
 

минус поставили ?

или так
if (preg_match('#</offers>\s*</shop>#i', $txt, $matches, PREG_OFFSET_CAPTURE, -50))
 print_r($matches);

  Ответить  
 
 автор: simbel   (06.08.2009 в 19:03)   письмо автору
 
   для: ......   (06.08.2009 в 18:45)
 

Когда ставлю один из параметров SEEK_SET, SEEK_CUR, SEEK_END, не важно какой знак стоит - не работает. Если без параметра и без минуса - работает.

На счёт регулярных выражений - да по другому наверное никак.

А вот как бы сделать так, что бы не перечитывать весь файл, а только несколько последних строк... Разобраться бы с fseek().

Не может использоваться с файловыми указателями, возвращаемыми функцией fopen(), если они используют форматы "http://" или "ftp://".
- вычитал в справочнике. Что это значит? Может здесь собака зарыта?

  Ответить  
 
 автор: ........   (06.08.2009 в 21:19)
 
   для: simbel   (06.08.2009 в 19:03)
 

>fopen('/home/.....
у Вас локальный файл
<pre><?php
$fp 
fopen('c:\WINDOWS\Driver Cache\i386\driver.cab''rb');

fseek($fp, -8SEEK_END);

$data fgets($fp4096);
fclose($fp);
var_dump($data);
?>

или нет ?

  Ответить  
 
 автор: simbel   (06.08.2009 в 22:50)   письмо автору
 
   для: ........   (06.08.2009 в 21:19)
 

да, локальный на денвере

Спасибо разобрался - всё работает.

Проблема похоже была в том, что перепутал местами аргументы функции fseek

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования