За последние 24 часа нас посетили 73522 программиста и 1650 роботов. Сейчас ищут 1124 программиста ...

Глобальная переменная для всех соединений

Тема в разделе "PHP для новичков", создана пользователем nospiou, 4 фев 2018.

  1. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Как создать глобальную переменную для ВСЕХ соединений $GLOBALS это только для текущего а для всех возможно?
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Приведу пример. Laravel .env (файл конфигурации) считывается при запуске php artisan serve он нигде не кэшируется но изменить значения без перезапуска сервера невозможно. Как им это удалось?
     
  3. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    посмотрите в сторону паттерна "Реестр".. удобно там все хранить что нужно..
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @nospiou в качестве shared memory для PHP чаще всего используют Memcached, Laravel тоже активно его использует.
     
  5. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @[vs] Memcached это отдельный сервер по дефолту Laravel его никак использовать не может. Файловые кэши я все пересмотрел. Они как то в память значения добавляют при запуске но как? Ruby python node все проще а вот куда в php пихнуть?
    Есть статические данные на 50мб которые не изменяются хочется иметь к ним быстрый доступ. Я даже файл php с массивом сгенерировать не могу. Php собственный массив сохранять не умеет) А через foreach это 20мин. json_encode тоже не лучший вариант. Memcached немного для другого + json_encode ну такое себе....
    Вообще интересное что быстрее sql или array_search?
    --- Добавлено ---
    UPD. А вообще вот писал и меня постигла страшная мысль... Php хоть классы со статическими переменными кэширует или каждый раз дергает файл?
     
  6. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Алекс8 При каждом запуске переменная будет создаваться заново. Вообще в php нет паттернов есть имитация) Мне нужно создавать только один раз "при инициализации" до перезапуска. Нашел apache_setenv по описанию интересно но пока не тестировал да и laravel справляется без apache
     
  7. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    $arr = unserialize(file_get_contents($file)) или json_decode переменная не будет кэшироваться в оперативной памяти или будет если файл не изменяется? Какая там логика? Или может лучше require или еще что то что бы не дергать этот файл каждый раз?
     
  8. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    json файл, закрытый для доступа через web сервер, как вариант.
     
  9. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    У вас бывает такое, что вроде как хочется ответить, но нутром чуешь, что без толку? )
     
  10. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @romach На самом деле я хороший) Просто немного запутался. В старых версиях php все было просто. Скрипт на лету компилировался и все... Сейчас по другому. Есть встроенные пред компиляторы оптимизаторы и т.д В любом случаи не может тот же Laravel с тысячами классов постоянно дергать все файлы. Он держит их где то в оперативной памяти. Вот и хочется понять как именно происходить кэширование. Каким образом я могу добавить переменную взяв значения с файла что бы этот файл каждый раз не дергать? Все просто.
    В идеале ссылку на статью\документацию что бы понять что где и как кэшируется а что нет. Если и брать memcached не совсем понятно чем он лучше sqlite :memory: Да и зачем все эти обходные пути неужели php не может запомнить переменную?)
     
    #10 nospiou, 5 фев 2018
    Последнее редактирование: 5 фев 2018
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    http://phpfaq.ru/na_tanke
    Да, теперь в PHP есть встроенный кэшер опкодов. Вероятно Laravel устанавливает определенные параметры опкэшера https://php.ru/manual/opcache.configuration.html которые не дают обновить файл (например большой срок жизни кэша). Но это не сохранение переменной а кэш файла. Как сам видишь, изменить конфиг Laravel нельзя.
     
  12. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ларка кеширует конфиги, если что.
    Код (Text):
    1. php artisan config:clear
    и не надо сервер перезапускать....
     
  13. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @[vs]
    Это уже похоже на правду. Осталось разобраться как заставить закешировать файл и как для конкретного файла изменить срок жизни кэша. Разобраться успокоится и сделать через mysql и redis)
     
  14. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
  15. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @romach А ты писать не хотел) Пролистал код. Увидел...
    PHP:
    1. if (function_exists('apache_getenv') && function_exists('apache_setenv') && apache_getenv($name)) {
    2.             apache_setenv($name, $value);
    3. }
    artisan serve соответсвенно пишет в встроенный сервер. Теперь хоть знаю где искать.