За последние 24 часа нас посетили 33567 программистов и 1317 роботов. Сейчас ищут 1219 программистов ...

Warning: file_get_contents

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

  1. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Сейчас там у меня не совсем так.... ща покажу там куда по круче всё.

    PHP:
    1. <?php
    2. namespace App\Views\Mod;
    3. ?>
    4.  
    5. <ul class="menu">
    6.     <?php foreach($this->valArray['category'] as $cats) :?>
    7.     <li class="static-block slideBox">
    8.         <a >
    9.             <?php echo $cats['category_name'];?>
    10.         </a>
    11.         <?php include ROOT.'/App/Views/Mod/include/cats.php';?>
    12.     </li>
    13.     <?php endforeach;?>
    14. </ul>
    Вот такая запись а в инклуде в итоге тоже код. И это не типа вьюха это реально формирующийся кусок, кода html... Как вот его организовать можешь более явно мне привести пример. Пожалуйста. Вот так у меня вьюхи отдельных от твига модулей делаются.

    Суть в том, чтобы не писать ни какой навороченный php код а просто сделать вывод во view или это уже не вьюха, а какой то обработчик. Суть в том чтобы сделать html код и передать его как переменную в твиг. А переменная несёт весь html код в виде одной строчки.

    Там не должно быть создание каких либо функций или массивов, или ещё чего то, архитектура mvc, не просто имеет ведь такую обривеатуру :) Model View Controller.
    Вот я и стараюсь не гавнокодить и придерживаться правильности строения, моего приложения.

    Контроллер Определяет модель и передают данные во view чтобы там сделать вывод html страницы. Только я сделал так сказать двойные вью я строю модели отдельно, а потом собираю из них одну вьюшку с помощью шаблонизатора твиг, на самом деле преимущества такого сбора в том, что если какой либо элемент залагает вся страница попой не накроется, я бы сказал это что-то типа фреймов в html у меня сейчас реализовано. Грубо говоря я делаю отдельный модуль от сайта, который можно потом будет подрубить к любому месту на странице не зависимо так сказать, глобально для всех шаблонов, хоть дублируй, можно ещё фишки на этой почве внести разные с подстановкой разных параметров для вывода той же вьюшки но по другим параметрам к примеру. Ну идея прикольная и уж не знаю на сколько верно я её реализовал.
     
    #26 askanim, 20 июн 2016
    Последнее редактирование: 20 июн 2016
  2. mr.akv

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

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Лады. Такой вариант будет слишком ёмким. Можно и по-другому:
    PHP:
    1. <?php
    2. namespace App\Views\Mod;
    3. ?>
    4.  
    5. <ul class="menu">
    6.     <?php foreach($this->valArray['category'] as $cats) :?>
    7.     <li class="static-block slideBox">
    8.         <a >
    9.             <?php echo $cats['category_name'];?>
    10.         </a>
    11.         <?php include ROOT.'/App/Views/Mod/include/cats.php';?>
    12.     </li>
    13.     <?php endforeach;?>
    14. </ul>
    15.  
    16. <?php
    17. $output = ob_get_contents();
     
    askanim нравится это.
  3. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    А если я всё это встрою динамично чтобы всё автоматом было пройдёт так
    другой файл где подключается данный файл

    PHP:
    1. public function getModule() {
    2.     ob_start();
    3.         require ROOT.'Путь к файлу';
    4.      $getModuleContent = ob_get_contents();
    5.      ob_end_clean();
    6.     return  $getModuleContent
    7. }
    8.  
    9. // Так же тоже типа проканает?
    PHP:
    1. <ul class="menu">
    2.     <?php foreach($this->valArray['category'] as $cats) :?>
    3.     <li class="static-block slideBox">
    4.         <a >
    5.             <?php echo $cats['category_name'];?>
    6.         </a>
    7.         <?php include ROOT.'/App/Views/Mod/include/cats.php';?>
    8.     </li>
    9.     <?php endforeach;?>
    10. </ul>
    --- Добавлено ---
    А по логике вещей ведь это получается дублирование кода на одной и той же странице ?)

    А чем так плохо дёргать http ? В html же например существуют iframe которые позволяют вставлять другие страницы...

    Мне кажется это нужная вещь, просто явно как бы не для моего случаю не просто дял вывода в меню, а например скажим так обратиться например к другой странице чтобы там произвести нужные расчёты и много всякой другой лабуды если там целая куча всего, а потом вернуть результат, на эту страницу чтобы не генерировать на одной странице весь php код, вроде бы логике вещей если нагрузка была бы очень большой то разделить на не сколько частей, было бы оптимизированей.
    --- Добавлено ---
    Что будет оптимизорваней дёрнуть другую страницу и она в фоновом режиме, на сервере там обновиться и сделает все необходимые запросы к бд, аякс же дёргает по http php файлы, и как бы нормально... Можете мне объяснить что оптимальней ?
     
  4. mr.akv

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

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Сейчас не понял про дублирование. Факт в том, что мы можем выполнить все инструкции и записать их в переменную, вместо выброса на страницу.
    основная причина - это скорость. Либо машина php будет обрабатывать страницу, либо ещё лишний раз просить веб-сервер делать запрос. Лишнее звено в цепи. А айфреймы - это что-то из разряда того, когда его придумывали, твоего любимого PSR-4 ещё не было, но ты же понимаешь, что он лучше, нежели чем совсем старые недодуманные стандарты)
    --- Добавлено ---
    проверь сам:
    PHP:
    1. $start = microtime(true);
    2. // тело скрипта
    3. echo 'Время выполнения скрипта: '.(microtime(true) - $start).' сек.';
     
    askanim нравится это.
  5. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    ща сделаю, минут через 25 выложу результаты )))
     
  6. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Так в результате тестов, с
    PHP:
    Время выполнения скрипта: 0.030600070953369 сек.

    И результат который я получил методом
    PHP:
    1. file_get_contents('http://и адрес');
    Время выполнения скрипта: 0.23702907562256 сек.


    Да не вооружённым взглядом видно, и даже телескоп не нужен, что собирать страницу по http запросам на другие страницы, это полная жопень :)
    --- Добавлено ---
    Чувак я даже не знаю тебе больше чем лайк надо поставить :) Я теперь твой кумир :)
     
  7. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Было бы забавно. Я вот к примеру не переношу скобку на новую строку при объявлении метода:
    PHP:
    1. public function foo() {
    2.  
    3. }
    4.  
    5. public function bar()
    6. {
    7.  
    8. }
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @askanim я много сообщений назад писал про ob_start() и что нужно отказаться от http в этом контексте, это я к тому, что когда что-то советуют, попробуй хотя бы сделать тестовый пример самостоятельно, так как не всегда тебе будут давать готовый код, чтобы ты понял.
     
  9. mr.akv

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

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    !!!
    прям ненавижу эту фигню, аж глаз режет
     
  10. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @romach, а я вообще никогда не переношу скобку на новую строку.
     
  11. mr.akv

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

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Я не переношу строку никогда, только делаю пробел между скобками и скобкой
    PHP:
    1. function example() {
    2.     //body
    3. }
     
    askanim нравится это.
  12. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Я не влупил, что он делает и решил пока отложить этот вопрос на попозже, но смотрю тут товарищ @mr.akv предложил вариант помощи с объяснением, так что я не стал отказываться и принял его учение. Я теперь буду везде где его видеть ставить лайк :)
    --- Добавлено ---
    А у меня приверженности такой нет, я просто иногда делаю и так и так... Как по мне так без разнице вообще... По мне так важна табуляция, перенос строк и комментирование кода. :)
     
  13. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Улыбнуло.
    Форматирование.
    По ошибке могу сказать, что кривоваты настройки allow
     
    askanim нравится это.
  14. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Спасибо :)
     
  15. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Переносить скобку на новую строку смысл имеет для удобства чтения сфолженного кода. Если сигнатура функции/метода или условие условного или циклического оператора содержат многобукв, то свёрнутый код будет справа от этой бесконечной строки. И всегда будет неравномерно справа. При переносе же фигурной скобки - окажется под ней. И всегда будет оказываться на одном отступе.
     
    mr.akv, askanim и romach нравится это.