Как создать глобальную переменную для ВСЕХ соединений $GLOBALS это только для текущего а для всех возможно?
Приведу пример. Laravel .env (файл конфигурации) считывается при запуске php artisan serve он нигде не кэшируется но изменить значения без перезапуска сервера невозможно. Как им это удалось?
@nospiou в качестве shared memory для PHP чаще всего используют Memcached, Laravel тоже активно его использует.
@[vs] Memcached это отдельный сервер по дефолту Laravel его никак использовать не может. Файловые кэши я все пересмотрел. Они как то в память значения добавляют при запуске но как? Ruby python node все проще а вот куда в php пихнуть? Есть статические данные на 50мб которые не изменяются хочется иметь к ним быстрый доступ. Я даже файл php с массивом сгенерировать не могу. Php собственный массив сохранять не умеет) А через foreach это 20мин. json_encode тоже не лучший вариант. Memcached немного для другого + json_encode ну такое себе.... Вообще интересное что быстрее sql или array_search? --- Добавлено --- UPD. А вообще вот писал и меня постигла страшная мысль... Php хоть классы со статическими переменными кэширует или каждый раз дергает файл?
@Алекс8 При каждом запуске переменная будет создаваться заново. Вообще в php нет паттернов есть имитация) Мне нужно создавать только один раз "при инициализации" до перезапуска. Нашел apache_setenv по описанию интересно но пока не тестировал да и laravel справляется без apache
$arr = unserialize(file_get_contents($file)) или json_decode переменная не будет кэшироваться в оперативной памяти или будет если файл не изменяется? Какая там логика? Или может лучше require или еще что то что бы не дергать этот файл каждый раз?
@romach На самом деле я хороший) Просто немного запутался. В старых версиях php все было просто. Скрипт на лету компилировался и все... Сейчас по другому. Есть встроенные пред компиляторы оптимизаторы и т.д В любом случаи не может тот же Laravel с тысячами классов постоянно дергать все файлы. Он держит их где то в оперативной памяти. Вот и хочется понять как именно происходить кэширование. Каким образом я могу добавить переменную взяв значения с файла что бы этот файл каждый раз не дергать? Все просто. В идеале ссылку на статью\документацию что бы понять что где и как кэшируется а что нет. Если и брать memcached не совсем понятно чем он лучше sqlite :memory: Да и зачем все эти обходные пути неужели php не может запомнить переменную?)
http://phpfaq.ru/na_tanke Да, теперь в PHP есть встроенный кэшер опкодов. Вероятно Laravel устанавливает определенные параметры опкэшера https://php.ru/manual/opcache.configuration.html которые не дают обновить файл (например большой срок жизни кэша). Но это не сохранение переменной а кэш файла. Как сам видишь, изменить конфиг Laravel нельзя.
Ларка кеширует конфиги, если что. Код (Text): php artisan config:clear и не надо сервер перезапускать....
@[vs] Это уже похоже на правду. Осталось разобраться как заставить закешировать файл и как для конкретного файла изменить срок жизни кэша. Разобраться успокоится и сделать через mysql и redis)
Из .env - создаются переменные окружения (https://github.com/vlucas/phpdotenv), artisan serve стартует встроенный веб-сервер, в результате получаем то что получаем.
@romach А ты писать не хотел) Пролистал код. Увидел... PHP: if (function_exists('apache_getenv') && function_exists('apache_setenv') && apache_getenv($name)) { apache_setenv($name, $value); } artisan serve соответсвенно пишет в встроенный сервер. Теперь хоть знаю где искать.