Необходимо организовать файл с логами для сайта. Клиент требует что бы формат был .xml
Я начинающий разработчик, много не знаю и всё ещё задаю глупые вопросы, поэтому я здесь.
Логи пишутся корректно, за исключением того, что в одну строку. Заказчик недоволен. Пробовал много разных вариантов, результат один.
Вот пример моего кода добавления строк в .хмл файл:
$date1 = date("d/m/y");
$doc = new DOMDocument();
$doc ->load("log.xml");
$root = $doc->getElementsByTagName('logs')->item(0);
$login = $doc->createElement( "login" );
$date = $doc->createElement('date');
$date->appendChild($doc->createTextNode($date1));
$login->appendChild($date);
$root->appendChild($login);
$doc->save("log.xml");
В качестве примера привёл только добавления текущей даты, дабы не засорять лишним кодом.
А вот изначальный log.xml
<?xml version="1.0"?>
<logs>
</logs>
<logs> соответсвенно корень, в него записываются все логи.
причём записываются в одну строку. Подскажите пожалуйста, где ошибка или укажите на альтернативное решение, если таковое имеется.
Спасибо.
Спустя 20 часов, 33 минуты, 34 секунды (10.06.2010 - 20:42) print_f написал(а):
неужели никто не знает?
Спустя 40 минут, 5 секунд (10.06.2010 - 21:22) Семён написал(а):
SimpleXML подскажет.
Спустя 3 часа, 26 минут, 23 секунды (11.06.2010 - 00:48) print_f написал(а):
Согласен. Это вариант, всё работает, спасибо. Хотя для такой маленькой задачи весьма нецелесообразно.
Но тем не менее, ведь не может быть, что бы в DOMDocument на пустом месте возник подобный баг. Очень хотелось бы всё же разобраться, найти ошибку и впредь на такой ерунде не просиживать. Если есть какие-то соображения на этот счёт, я буду чертовски признателен.
Но тем не менее, ведь не может быть, что бы в DOMDocument на пустом месте возник подобный баг. Очень хотелось бы всё же разобраться, найти ошибку и впредь на такой ерунде не просиживать. Если есть какие-то соображения на этот счёт, я буду чертовски признателен.
Спустя 10 дней, 23 часа, 46 минут, 17 секунд (22.06.2010 - 00:34) print_f написал(а):
Нашёл таки!!!
В конец надо было добавить:
Ну и сама функция:
Может быть кому-то пригодится.
В конец надо было добавить:
$doc ->formatOutput = true;
$in = indent($doc ->saveXML());
$file = fopen("log.xml","w");
fputs($file,$in);
fclose($file);
Ну и сама функция:
function indent($text)
{
$find = array('>', '</', "\n\n");
$replace = array(">\n", "\n</", "\n");
$text = str_replace($find, $replace, $text);
$text = trim($text);
$text_array = explode("\n", $text);
$open_tags = 0;
foreach ($text_array AS $key => $line)
{
if (($key == 0) || ($key == 1))
$tabs = '';
else
{
for ($i = 1; $i <= $open_tags; $i++)
$tabs .= "\t";
}
if ($key != 0)
{
if ((strpos($line, '</') === false) && (strpos($line, '>') !== false))
$open_tags++;
else if ($open_tags > 0)
$open_tags--;
}
$new_array[] = $tabs . $line;
unset($tabs);
}
$indented_text = implode("\n", $new_array);
return $indented_text;
}
Может быть кому-то пригодится.
Спустя 5 минут, 19 секунд (22.06.2010 - 00:40) Nikitian написал(а):
А зачем эти переводы строк? Смотреть xml можно в браузере, а все современные браузеры его отображают красиво, с иерархией.
Спустя 4 минуты, 37 секунд (22.06.2010 - 00:44) print_f написал(а):
Честно говоря, я и сам не понимаю. Но клиент всегда прав и если он хочет, а ещё и платит, то нужно стараться)
_____________
Быдлоскрипт — это скрипт, сделанный быдлокодером «с душою», либо злым кодером с жуткими умыслами.