Чтение текстового файла странного формата

Svetlanka_87

Новичок
Чтение текстового файла странного формата

Добрый день, Господа!
У меня возникла проблема следующего рода:

В ОС Windows существует средство администрирования WMI. При его помощи забираются логи журналов и передаются админу в текстовом формате (Logs.txt).

После этого на серваке под управлением Апач и пхп этот файл парсится и вставляется в базу данных. Проблема заключается в следующем:

Вот файл который получается от WMI:



его название условно Logs.txt


Двлее я пишу скрипт вида:
PHP:
<?php

$f_arr = file("logs_pc/Logs.txt");

 
for($i=0;$i<count($f_arr);$i++){
    echo $f_arr[$i];
}

?>
После этого запускаю в браузере страницу (она и сейчас находится там): http://soul.18ero.com/pars.php


И вот что выводится: в браузере Chrom, IE все нормально, даже обращение к строкам из середины файла удачно отображается, а вот в Opera выводится весь файл с квадратами вместо пробелов а если осуществлять доступ к какой-то конкретной строке - то вобще пусто - ничего не выводит. В чем может таиться проблема? Кодировка страницы Windows-1251.
Вот скрин:




Из скрина видно что в самом начале два символа "яю" ни как не могу понять что это такое - ведь в файле этого нет.. начало файла - слово Category..


При применении функции strpos($f_arr,0,8) по идее должно вывестись (см первый скрин): Category=
Однако выводится только: Cate
То есть каждый символ идет как за 2.. почему так?:(

и еще что я заметила: если взять, например, этот же файл Logs.txt открыть его руками, скопировать в буфер, создать файл (например Logs2.txt) и вставить в него из буфера, и сохранить, то все работает замечательно.
и выводится и в опере хорошо и обращаться можно к любой строке и доступ к символу идет как к 1 а не со смещением = 2 (то есть выведет Category)


Надеюсь на вашу помощь.


ЗЫ Если кто сталкивался с WMI то может быть как-то формат вывода нужно редактировать

Заранее спасибо.
 

Svetlanka_87

Новичок
Автор оригинала: dimagolov
BOM

отдавать нужно валидный хтмл, а перед ним заголовок с кодировкой.
что такое BOM ?

и код страницы написан правильно:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>Работа с файлами в PHP. FAQ. </title> 
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
</head>
<body>
<?php


$f_arr = file("logs_pc/1.txt");

 
for($i=0;$i<count($f_arr);$i++){
echo $f_arr[$i];
}


?>
</body>
</html>


что касается "яю"

А остальные проблемы в таком случае от чего??
 

Svetlanka_87

Новичок
я как поняла вы предлагаете сменить кодировку на utf-производную?
смысла это не меняет только вместо "ЯЮ" черные символы появляются, и собственно, уважаемые, проблема не в этом - а в том как парсить такой текстовый файл..
 

zerkms

TDD infected
Команда форума
нет.
нужно убрать бом, если он тебе не нужен.
а по поводу проблемы - в чём именно затык?
 

Svetlanka_87

Новичок
При применении функции strpos($f_arr,0,8) по идее должно вывестись (см первый скрин): Category=
Однако выводится только: Cate
То есть каждый символ идет как за 2.. почему так?
 

zerkms

TDD infected
Команда форума
убрала BOM?
а что, если там написать не 8, а 6? будет 3 символа?
 

dimagolov

Новичок
потому что у тебя кодировка файла не 1251, а UTF-8, в чем тебя уже час пытаются убедить.

-~{}~ 01.12.09 08:06:

хотя странно, 8 байт должно давать не Cate....
 

zerkms

TDD infected
Команда форума
Ну поставила я UTF-8
и что изменилось??
не надо истерить.
файл откуда приходит? ты пробовала в нём убрать bom? (спрашиваю уже в третий раз)

а что, если там написать не 8, а 6? будет 3 символа? (спрашиваю во второй раз)
 

dimagolov

Новичок
только тупое прописывание этого в заголовке не поможет. нужно или сам pars.php сохранить в UTF-16, или перекодировать строки из файла в ту кодировку, в которой сохранен pars.php (не факт, что это будет возможно).

но в любом случае BOM (первые два байта) надо вырезать, они в html лишние.
 

Svetlanka_87

Новичок
PHP:
<html>
<head>
<title>Title</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-16" /> </head>
<body> 
<?php 

$f_arr = file("logs_pc/1.txt"); 
 
for($i=0;$i<count($f_arr);$i++){ 
  echo $f_arr[$i]; 
} 

?> 
</body> 
</html>



http://soul.18ero.com/pars.php

Без результатно:(
 

Svetlanka_87

Новичок
Автор оригинала: dimagolov
только тупое прописывание этого в заголовке не поможет. нужно или сам pars.php сохранить в UTF-16, или перекодировать строки из файла в ту кодировку, в которой сохранен pars.php (не факт, что это будет возможно).

но в любом случае BOM (первые два байта) надо вырезать, они в html лишние.
Спасибо, уберем)
а вот что касается такого чуда:

и еще что я заметила: если взять, например, этот же файл Logs.txt открыть его руками, скопировать в буфер, создать файл (например Logs2.txt) и вставить в него из буфера, и сохранить, то все работает замечательно. и выводится и в опере хорошо и обращаться можно к любой строке и доступ к символу идет как к 1 а не со смещением = 2 (то есть выведет Category)
почему так?
 

Svetlanka_87

Новичок
Автор оригинала: zerkms
не надо истерить.
файл откуда приходит? ты пробовала в нём убрать bom? (спрашиваю уже в третий раз)

а что, если там написать не 8, а 6? будет 3 символа? (спрашиваю во второй раз)
Во-первых никто не истерит! Во-воторых когда ставлю не 8 а 6 то никаких 3 символов не появляется!!! Просто вместо черных ромбов снова ставится "яю"
и кслову -
ты пробовала в нём убрать bom?
файл формата .txt

скрин его в первом посте предоставлен, как я уберу оттуда BOM если все что в файле на скрине изображено.

-~{}~ 01.12.09 15:27:

Автор оригинала: zerkms
в четвёртый раз:

!!!ПОТОМУ ЧТО В ПОЛУЧИВШЕМСЯ ФАЙЛЕ НЕТ BOM!!!

сударыня, оденьте очки
ну так скажите как его туда прописать, если это возможно при помощи PHP, мне кажется было бы куда проще сразу сказать об этом а не кричать на меня..:((((((((
 

zerkms

TDD infected
Команда форума
мде %)
взять любой нормальный блокнот, например emeditor или notepad++ и воспользоваться их чудесными средствами редактирования

то, что ты не видишь этих символов, не значит что их там нет.

ну так скажите как его туда прописать
зачем тебе его туда прописывать? тебе его оттуда нужно УБРАТЬ.
 

Svetlanka_87

Новичок
Автор оригинала: zerkms
мде %)
взять любой нормальный блокнот, например emeditor или notepad++ и воспользоваться их чудесными средствами редактирования

то, что ты не видишь этих символов, не значит что их там нет.


зачем тебе его туда прописывать? тебе его оттуда нужно УБРАТЬ.
Спасибо, так вся проблема и заключается в этом!!!
Я догадалась, пишу же, скопировать и вставить в новый файл - это почти тоже самое о чем вы пишете, только нет такой возможности на практике - этот процесс автоматизирован и открывать редакторы и что-то там удалять и менять не получится, нужно как-то средствами php.....
 
Сверху