За последние 24 часа нас посетили 17327 программистов и 1723 робота. Сейчас ищут 1604 программиста ...

Портальная система в одном файле

Тема в разделе "PHP для новичков", создана пользователем mpak, 11 ноя 2014.

  1. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    С версии 5.3 php в стандартную сборку входит расширение phar аналог jar в java. В связи с этим, относительно недавно начал использовать новый способ установки портальной системы. Суть в следующем. Заливаем всю систему в одном phar архиве и настраиваем на него .htaccess Дополнительно в файловую систему закидывается файл конфигурации баз данных и директорию для хранения загружаемых файлов. И все. Архив уже содержит в себе все необходимое. Изображения, скрипты установки, исполняемые файлы и шаблоны страниц. В наличие несколько десятков модулей с интернет магазинами, гостевыми книгами, фото архивами и визуальными редакторами. При необходимости любой файл можно заменить положив рядом файл. Архив при исполнении сам найдет и подменит каждый файл вашей заменой. Очень удобно хотел поделиться.

    Не встречал подобных способов установки портальной системы.
    Получается что для работы достаточно два файла.

    .htaccess
    mpak.phar

    .htaccess можно взять отсюда https://raw.githubusercontent.com/mpak2/mpak.su/master/.htaccess
    mpak.phar доступен отсюда https://github.com/mpak2/mpak.su/raw/master/phar/mpak.phar

    Плюсом в системе будет автоматизированное создание админки, Правится все и вся. Ключи связывваются автоматически вам нужно только правильно указать их имена. И система пересборок при выводе данных в шаблон. Очень удобная штука. Если кратко, работает так:

    Все таблицы доступны по их именам внутри разделов к примеру cat - категория статей, index сами статьи таблица статей связана с категориями по вторичному ключу cat_id
    Чтобы перебрать все категории статей а в них все статьи с этих категорий пишем так так

    Код (Text):
    1. <? foreach(rb("cat") as $cat): # Перебираем массив со всеми категориями ?>
    2.     <? pre($index); # Отображаем поля категории ?>
    3.     <h2><?=$cat['name']?></h2>
    4.     <? foreach(rb("index", "cat_id", "id", $cat['id']) as $index): Перебираем все статьи из категории $cat ?>
    5.         <!-- Все поля статьи сейчас доступны в массиве $index -->
    6.         <? pre($index); # Отображаем поля статьи ?>
    7.         <h3><?=$index['name']?></h3>
    8.         <div><?=$index['text']?></div>
    9.     <? endforeach; ?>
    10. <? endforeach; ?>
    функции pre($cat) и pre($index) выведут примерно следующее:
    Код (Text):
    1. Array
    2. (
    3.     [1] => Array
    4.         (
    5.             [id] => 1
    6.             [cat_id] => 0
    7.             [name] => Первая категория
    8.         )
    9.  
    10.     [2] => Array
    11.         (
    12.             [id] => 2
    13.             [cat_id] => 0
    14.             [name] =>  Вторая категория
    15.         )
    16. )
    17.  
    18. Array
    19. (
    20.     [8] => Array
    21.         (
    22.             [id] => 8
    23.             [cat_id] => 2
    24.             [uid] => 1
    25.             [time] => 1414221579
    26.             [name] => Любимчик Фортуны
    27.             [keywords] =>
    28.             [description] => Джон Ло перевернул всю мировую экономику.
    29.             [text] => Текст статьи
    30.        )
    31.  
    32.     [2] => Array
    33.         (
    34.             [id] => 2
    35.             [cat_id] => 0
    36.             [uid] => 4
    37.             [time] => 1412332846
    38.             [name] => О проекте
    39.             [keywords] =>
    40.             [description] =>
    41.             [text] => Текст статьи
    42.         )
    43.     [3] => Array
    44.         (
    45.             [id] => 3
    46.             [cat_id] => 0
    47.             [uid] => 1
    48.             [time] => 1412333588
    49.             [name] => Контакты
    50.             [keywords] =>
    51.             [description] =>
    52.             [text] => Текст статьи
    53.         )
    54.  
    55.     [9] => Array
    56.         (
    57.             [id] => 9
    58.             [cat_id] => 0
    59.             [uid] => 1
    60.             [time] => 1414254128
    61.             [name] => Инструкция
    62.             [keywords] =>
    63.             [description] =>
    64.             [text] => Текст статьи
    65.         )
    66. )
    Получается, что мы любую страницу можем вообще написать без кода. Установить легко, код минимум, ошибки почти исключены так как лишних файлов в файловой системе просто нет. Обновляется вся система заменой одного файла. Все ваши файлы лежат рядом и при обновлении не изменяются.
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тебя чего, пугает, когда много файлов в папке?
     
  3. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Напрягает когда в файловой системе находится три тысячи файлов и большая часть из них относится не к измененным и нужным во время работы а к системным, которые сами же разработчики не рекомендуют изменять. В общем это немного удобнее. Использовать или нет каждый решает сам. А с пересборкой как вам?
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    движок в три килифайла? это который?
     
  5. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Архив phar чуть больше 7Мб Большую часть этого размера занимают изображения
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    я правильно понимаю что по каждому пердежу называемому запросом со стороны веб-сервера идет распаковка архива и выполнение хранащегося там кода? то есть никакого шареда, никакого кэша опкода, никаких разграничений прав? зато на каждом запросе сталкиваемся с инсталлятором включенным в архив. во-первых его там не должно быть после установки а во-вторых на кой хер он там сдался? я один раз ставлю на ближайший миллиард запросов. нет? поясните в чем суть вашего произведения искусства

    Добавлено спустя 2 минуты 18 секунд:
    и все же портальная система в двух файлах. конфиг-то в пархив не собран. значит лежит рядом. а сути существования файла htaccess на продакшн-хосте я не вижу.
     
  7. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Не правильно. В настройках веб сервера можно установить чтобы архив один раз подгружался в оперативную память и сохранил его там до перезагразки. Вся файловая система занимает 7Мб в оперативе и не обращается за файлами вообще. Не знаю установлена эта настройка сразу же при установке или нужно ставить дополнительно. Визуально определить работает файловая система из архива или из файловой системы не возможно. Скорость работы не меняется.
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну вы это, эйчтиаксес тоже в память компилируйте. не дюже если у вас портал одним архивом постоянно дергать такой же постоянный как и архив файл настроек веб-сервера.
     
  9. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Архив уже расположен весь в оперативной памяти. Быстрее чем работа с оперативной памятью я ничего не знаю. Не запаривался особо оптимизацией. Даже в таком варианте работы получается очень не плохо. Если кому-то производительности будет не хватать, сможет еще и с htaccess заморочится.
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    архив требует распаковки
     
  11. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Повторю при правильной настройки сервера распаковка происходит один раз при загрузке сайт. Все остальное время работа идет из оперативной памяти.

    Вот сайт работает по такому принципу. http://gektarkoles.ru/ под копирайтом поставил время работы страницы. 0.092167 с. достаточно приемлемое время со всеми запросами и обращениями к файловой системе.
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    архив требует распаковки. ты либо принимаешь эту идею, и закладываешь большее потребление процессора в свою схему ради экономии файлов и дискового пространства, либо ты экономишь процессор, используя тысячи файлов и кеширование.

    Мне кажется в твоём случае вполне можно себе позволить использовать фары, но смысла в этом нет вообще.
     
  13. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Улыбнуло. Экономия используя тысячи файлов? Как и кеширование. Любое дополнительное действие не экономит а расходует.
    А кеширование как таковое вносит кучу дополнительных багов. Но с ними нужно столкнуться чтобы понять о чем я сейчас. Любое кеширование это баланс между производительностью и оперативностью обновления информации.
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Что думает ваш лечащий врач об этом?
     
  15. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    логично. при правильной настройке сервера и три тысячи файлов тоже идут из оперативной памяти. но работа с файловой системой продолжает иметь место быть. вы мне плюсы-минусы сравните у упакованного сайта и разложенного в две сотни каталогов. итак?
     
  16. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Обновление в тысячи файлах себе представляете? Тут - замена одного файла. По мне так это похоже на инкапсулирование. Все базовые возможности скрыты от посторонних глаз, в то же время всегда возможна замена любого из компонентов системы простым добавлением файлов в файловую систему. Если файлов тысячи, то кто менял и что менял понять практически не возможно как собственно и что обновлять. У меня есть и такие сайты и такие как говорил использую этот способ относительно недавно и нашел в нем больше плюсов чем минусов. Если сравнивать с тем же классовым подходом представьте если методы класса будут размазаны по десятку или сотне файлов. И от наличия каждого будет зависеть работа всей систем. А при добавлении нужно помнить кто и что правит.
     
  17. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ссд? =)

    система версий, чувак.

    просто ни у кого кроме тебя похоже не возникает такого бардака на сервере, чтобы это напрягало.
     
  18. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    mpak нет вы мне не свое мнение удобно-неудобно расписывайте а плюсы-минусы разных решений.
     
  19. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Ещё можно разместить файлы в кэше процессора на разных уровнях, там скорость будет больше
     
  20. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    во-во. а еще можно на видеокарте вычисления делать - там просто рвань какая производительность будет =)
     
  21. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Документация к тому же git занимает не одну сотню страниц а правильное ее использование это пару лет практики. Я при том, что знаком с git уже года три не использую его даже процентов на 15 возможностей. Не думаю что все остальные чем то отличаются от меня. Для меня лично использование одного файла со всеми базовыми файлами легче чем использовать git log для поиска измененных файлов а потом решать блоки при мержах.

    Но опять же каждой проблеме свое решение. Вся система лежит в гите это никто не отменял. Но заливка сайта на хостинг и разработка удобнее с phar. Гит удобен на больших проектах с большим количеством разработчиков.
     
  22. metadon

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

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    хорошая идея написать интерпретатор php на OpenCL
     
  23. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    mpak ну то есть всё сводится к тому что лично ты не понимаешь назначения технологий и не можешь обосновать почему ты отказываешься от использования одних и навязываешь себе использование других. так?
     
  24. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    зацени чо viewtopic.php?f=26&t=50612 народ счастлив
     
  25. mpak

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

    С нами с:
    30 окт 2006
    Сообщения:
    440
    Симпатии:
    0
    Никому ничего не навязываю. Для себя нашел решение. После использования решение показалось достаточно удобно чтобы о нем узнали другие. Вот и поделился. Если кому то удобнее все еще разбираться в тысячи файлах - продолжайте. Лично я не буду настаивать на том, чтобы вы что то меняли в своей работе. Гитом пользуюсь давно и успешно. Знаю все его преимущества и недостатки.