За последние 24 часа нас посетили 17160 программистов и 1835 роботов. Сейчас ищут 1602 программиста ...

Добавление элементов в файл

Тема в разделе "Прочие вопросы по PHP", создана пользователем uniforever, 17 апр 2015.

  1. uniforever

    uniforever Новичок

    С нами с:
    17 апр 2015
    Сообщения:
    14
    Симпатии:
    0
    Здравствуйте. Долго мучаюсь с проблемой добавления элементов в открытый файл.
    $doc = new DomDocument;
    $doc -> load("source.php");
    $elem = $doc -> createElement("div");
    $doc -> getElementById("td1") -> appendChild($elem);
    $doc -> saveXML("source.php");

    И никаких элементов не добавляется в файл, никаких ошибок не выводит error_log. Помогите пожалуйста.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. uniforever

    uniforever Новичок

    С нами с:
    17 апр 2015
    Сообщения:
    14
    Симпатии:
    0
    Сделал, как ты сказал, спасибо мужик. Но, в этом вся и проблема, я как только не использовал уже. Уже и XPath пробовал, все с fwrite( w+), иначе просто не знаю, потому что теперь он выдает ошибку:
    Call to a member function appendChild() on a non-object и линия, которая указывает на getElementById();
    Скажи, что делать?
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    Мб так? Если версия пхп старая, то нельзя обращение делать к результату функции как к объекту.

    $td1 = $doc -> getElementById("td1");
    $td1->appendChild($elem);
    $doc -> saveXML("source.php");
     
  5. uniforever

    uniforever Новичок

    С нами с:
    17 апр 2015
    Сообщения:
    14
    Симпатии:
    0
    Спасибо, но не помогло. Остановимся на echo $doc -> saveXML(); и забудем ту позорную строку. Есть у кого-нибудь еще идеи?
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    чЧто значит "не помогло"? Ошибка не исчезла, или тег не появился в результате? Это капец разные исходы.
     
  7. uniforever

    uniforever Новичок

    С нами с:
    17 апр 2015
    Сообщения:
    14
    Симпатии:
    0
    Ошибка не исчезла =(
     
  8. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Код (PHP):
    1. $doc = new DomDocument;
    2. $doc -> load("source.php");
    3. $elem = $doc -> createElement("div");
    4. $doc -> getElementById("td1") -> appendChild($elem);
    5. $doc -> save("source.php"); 
     
  9. uniforever

    uniforever Новичок

    С нами с:
    17 апр 2015
    Сообщения:
    14
    Симпатии:
    0
    Нет, ошибка по прежнему есть. Он говорит, что запрос элемента по id от дум документа - не является объектом. Может быть это действительно так? Я то новичок и с таким еще не сталкивался. Через file_get_contents прекрасно реализуется. Но как без всяких проблем и массивов добавить в файл div?
     
  10. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    А ну все ясно с вами, вы пытаетесь в файл добавить который не является xml. Дурогоните...
    Самым натуральным образом.
    Почитайте, что такое xml.
    Прежде чем браться за это.
     
  11. uniforever

    uniforever Новичок

    С нами с:
    17 апр 2015
    Сообщения:
    14
    Симпатии:
    0
    <?xml version="1.0" encoding="utf-8"?>
    <html>
    <div>Привет</div></html>
     
  12. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
  13. uniforever

    uniforever Новичок

    С нами с:
    17 апр 2015
    Сообщения:
    14
    Симпатии:
    0
    Зачем это прислали?

    Добавлено спустя 6 минут 14 секунд:
    Есть код:

    <?php
    $doc = new DomDocument;
    $doc -> preserveWhiteSpace = false;
    $doc -> load("source.php");
    $xpath = new DOMXPath($doc);

    $query = "/html";
    $elem = $doc -> createElement("div", "Привет");
    $entries = $xpath -> query($query);
    foreach ($entries as $entry) {
    $entry -> appendChild($elem);
    }
    $fopen = fopen("source.php", "w+");
    fwrite($fopen, $doc -> saveXML());
    ?>

    Он работает на 100%. НО! У него есть огромный минус. Мне приходиться каждый раз переписывать файл. Я не могу тратить на такую ерунду ресурсы сервера, ведь рано или поздно при тысяче пользователей он попросту встанет. Именно поэтому мне нужен код, который будет добавлять
    на html, xhtml, любую другую страницу теги более проще. В идеале остановиться на appendChild и больше ничего, с такой же простотой как и в JS. Профессионалы, не подскажете?
     
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.769
    Адрес:
    :сердА
    Подскажем, если вы так собираете страницы для отдачи клиенту, то YOU DO IT WRONG.
     
  15. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    source.php:
    Код (PHP):
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <html></html>
    code php:
    Код (PHP):
    1. $dom=new DomDocument('1.0','utf-8');
    2. $file='source.php';
    3. $dom->load($file);
    4. $div=$dom->createElement('div','Приветище!!!');
    5. $dom->getElementsByTagName('html')->item(0)->appendChild($div);
    6. $dom->save($file); 
    source.php:
    Код (PHP):
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <html><div>Приветище!!!</div></html>
    Все потому, что у DOMNodeList есть только метод item, который выходит на DOMNode и там уже есть appendChild. Так - то.
    По этому и косяк у вас.
    А какраз у:
    Код (PHP):
    1. foreach ($entries as $entry) {
    Переменная $entry уже возвращает узлы, по этому и нет ошибки, что function undefined appendChild.
    И в Вашем случае getEementById работать не будет, так как он работает только по спецификации DTD, которой у вас и вовсе нет.
    И прежде, чем работать с такими вещами, прочитайте про эти вещи более глубже.
    Но в вашем случае никто не отменял xpath. Дерзайте и главное не забывайте про метод item, который вернет вам нужный узел.
     
  16. uniforever

    uniforever Новичок

    С нами с:
    17 апр 2015
    Сообщения:
    14
    Симпатии:
    0
    Извините за глупости, но можно мне пример xml страницы по dtd стандарту?
     
  17. uniforever

    uniforever Новичок

    С нами с:
    17 апр 2015
    Сообщения:
    14
    Симпатии:
    0
    Может хотя бы кто-нибудь написать что-то типа "Иди и сам найди" или никто этого сделать тупо не может?
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Иди и сам найди

    всегда пожалуйста)))
     
  19. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Пожалуйста, тут все есть.
    А тут тоже:
    XML DTD
    Ну а тут то сколько всего:
    xml dtd
    Круто не правда-ли? Попробуй тебе понравится :)
     
  20. uniforever

    uniforever Новичок

    С нами с:
    17 апр 2015
    Сообщения:
    14
    Симпатии:
    0
    Спасибо всем большое! Я разобрался в xml dtd. Такой вопрос, где его можно использовать, кроме баз данных?