За последние 24 часа нас посетили 17513 программистов и 1687 роботов. Сейчас ищет 841 программист ...

Переподключить файл с классом

Тема в разделе "Прочие вопросы по PHP", создана пользователем iliavlad, 11 фев 2014.

  1. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    Может кто подскажет)

    Есть программа, работающая как демон долгоиграющий. В ней используются несколько классов для обработки сообщений. При изменении одного из классов (не обязательного для работы всей программы) мне надо остановить этот демон, а потом запустить, чтобы при старте программы этот обновлённый класс подключился с новым кодом.

    Вот такое подключение на старте.
    Код (Text):
    1. <?php
    2. ...
    3. require_once 'class1.php';
    4. ...
    5. require_once 'classN.php';
    6. ...
    Собственно вопрос.
    Можно ли как-то переподключить один из классов без остановки всего демона? Что-нибудь вроде
    Код (Text):
    1. <?php
    2. ...
    3. unload('classN'); // unregister(); unreqiure(); etc...
    4. require_once 'classN.php';
    5. ...
    Сам не нашёл такого способа, но вдруг кто-нибудь сталкивался.
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    меняйте код класса и перезапускайте демона. она запустится уже с новым кодом.
    а пока работает перезагрузить код скрипта нельзя
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    пхпшные инклуды как идея позаимствованы из Си. Просто, в момент интерпретации, вместо строки с инклудом вставляется содержимое подключаемого файла. Это даже не обязательно должен быть пхп-файл. Приинклудить можно что угодно. Потом, полученная простыня уходит в интерпретатор и исполняется. Во время исполнения "разынклудивать" или "переинклудивать" ничего нельзя, потому что уже нет никаких файлов со скриптами.

    В вашем случае видна проблема с архитектурой. Выносите все данные, которые следует обновить, во внешний файл, который можно будет читать в память. Парсите его, дергайте инфу. Не вздумайте евалить - ваш демон распухнет в оперативе и, в лучшем случае сдохнет по алерту пыха, если настройки правильные, а в худшем положит вам сервер, если настройки-таки кривые.
     
  4. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    там не данные, там код, который, увы, получается отладить только в так сказать "продакшене".

    решил свою проблему с другой стороны. запустил ещё один демон, который использует только этот код, и уже его останавливаю-запускаю. основной демон теперь может работать без остановок до основного обновления. ура.
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Оу, ну всяко решение :)
    Опять же решение в области архитектуры. Молодец.