За последние 24 часа нас посетили 60920 программистов и 1744 робота. Сейчас ищут 1075 программистов ...

include VS file_get_contents

Тема в разделе "PHP для новичков", создана пользователем anempadest, 25 июн 2016.

  1. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно, тогда получиться twig или framework например Yii2, Symfony2
     
  2. anempadest

    anempadest Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    42
    Симпатии:
    0
    Погуглил... Нет, уж лучше я буду писать сам :)
    Ждём решения на "банальном" пространстве имён.
     
  3. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Почему?
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Я вообще хочу увидеть исходники CMS @askanim. А то он везде про него пишет.:)
     
  5. anempadest

    anempadest Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    42
    Симпатии:
    0
    Слишком высокая цена вхождения.

    Если позволите, у меня сегодня ещё вопрос возник. Схематически задача формулируется так.
    Есть Файл1, в котором всё собирается. Есть Файл2, в котором я присваиваю значение переменной $autor='ivanov'. И есть Файл3, содержимое которого через include встраивается в Файл1. Проблема в том, что в Файле3 есть формула, которая в качестве аргумента использует значение переменной $autor, которое, напомню, задаётся в Файле2.

    Насколько я понимаю, перед инклудом в Файл1, Файл3 полностью генерируется/компилируется, а потом полученное поставляется в запросивший Файл1. Но поскольку на момент компиляции в Файле3 переменная $autor не видна, то функция в Файле3 ничего не возвращает.

    Как побороть?
    Использовать str_replace не хотелось бы.
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Там вхождение происходит за 8 часов если знать PHP и ООП.


    include просто выполняет код на том месте, где его вызвали из того файла что ему указали, по этому не нарушай логику если бы ты всё делал в одном файле, вот и всё.
    выложи сюда пример ситуации с этими тремя файлами.
     
  7. anempadest

    anempadest Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    42
    Симпатии:
    0
    Файл index.php, где всё собирается.
    PHP:
    1. include 'article.php';
    2. if ($blog) {
    3.     include('z/blog.php');
    4. };
    Файл article.php, где присваивается значение переменной.
    PHP:
    1. $blog = array('autor' -> 'ivanov', 'date' -> '12.07.2016');
    Файл blog.php, где рисуется отметка об авторе статьи и дате публикации.
    PHP:
    1. <ul>
    2. <li>Автор: <? echo $blog['autor']; ?></li>
    3. <li>Дата: <? echo $blog['date']; ?></li>
    4. </ul>
    Проблема в том, что в index.php отметка выводится, то значения автор и дата пустые.
     
  8. anempadest

    anempadest Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    42
    Симпатии:
    0
    Я ошибся. Код из предыдущего сообщения выполняется. Я его придумал, когда сообщение писал.
    Не выполнялся у меня код, оформленный в Класс. Но то уже теорию подтянуть надо.
     
  9. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Вставлю свои две копейки по теме встала задача не дублировать html . Почисал репу и решил сделать статический метод для вывода html в цикле и встала два варианта либо как-то так:
    PHP:
    1. static function OutputForLoopHTML($path, $input) {
    2.         $time_start = microtime(true);
    3.         $html_block = file_get_contents($path);
    4.         foreach($input As $item) {
    5.             eval('?>' . $html_block . '<?php ');
    6.        }
    7.        $time_end = microtime(true);
    8.        $time = $time_end - $time_start;
    9.        $time .= ': Время исполнения file_get_Contents!<br />';
    10.        static::debag($time);
    11.    }
    Или так
    PHP:
    1. static function OutputForLoopHTML_include($path, $input) {
    2.         $time_start = microtime(true);
    3.         foreach($input As $item) {
    4.             include $path;
    5.         }
    6.         $time_end = microtime(true);
    7.         $time = $time_end - $time_start;
    8.         $time .= ': Время исполнения инклуда!<br />';
    9.         static::debag($time);
    10.     }
    И вот результаты замера времени на 186 строк вывода каждого блока view_test.png
     
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    не прошло и двух лет :)
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    включи кеш, чо уж тут сказать.
    --- Добавлено ---
    но вообще такой подход говорит о xyёвой архитектуре
     
  12. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Почему ?
    --- Добавлено ---
    Это шаблонизация внутри шаблонизатора внутри архитектуры framework
    Это просто заместо постоянного написания foreach.
    Скажем так чтобы html код не шёл монолитом я разбиваю его на некие модули. Для удобства разработки, создаю архитектуру в template
    У меня на сайте два блока вывод у них одинаковый а информация из базы разная. То есть html код одинаковый, а информация в массивах разная, но имена ключей в массиве тоже одинаковые. Потому-что данные берутся из одной и той же сущности, но с разными данными для разных блоков. Короче говоря это шаблонизация. И я наоборот создал функцию для того чтобы не дублировать html код. И за одно избавился от написания foreach в шаблоне. А по моему имя статического метода говорит само за себя OutputForLoopHTML
     
  13. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    почему родным шаблонизатором не пользуешься?

    почему какими-нибудь классами и автолоадами не пользуешься?
     
  14. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Потому что родной шаблонизатор это php
    --- Добавлено ---
    @igordata я же слимом пользуюсь
    --- Добавлено ---
    А причём тут классы и автолоад... Это тут причём ?
    Походу ты просто не понимаешь что я и зачем сделал. У меня всё нормально отрабатывает слим изконтроллера данные рендерит в шаблон я в шаблоне пишу html и в нём вывожу данные! Так вот два одинаковых блока с одинаковым до абсолюта html ток массивы вывода разные и чтобы не дублировать html я создал функцию при чём тут классы и автолоад. Там и так всё это есть.
    --- Добавлено ---
    Вы моё последнее сообщение не связывайте с другими сообщениями в этой теме. Те сообщения я писал полтора года назад. Когда ещё много чего не знал. И они вообще смешные. Даже обсуждать не хочу.
     
  15. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Админам давно пора замутить услугу, типа пришли смс и мы удалим все твои сообщения старше одного года ))