Повторно загружать php файл, полученный с 'require' при каждом вызове функции - PullRequest
0 голосов
/ 26 мая 2020

Внутри серверного сценария PHP, вызываемого через AJAX Request #1, мне требуется PHP script A с помощью оператора require.

На странице, с которой этот AJAX Request #1 может быть запущен, я также предоставляю способ изменить этот script A программно, нажав кнопку на той же странице через другой AJAX Request #2.

Следовательно, для того, чтобы все работало правильно без перезагрузки страницы, мне нужно убедиться, что каждый раз, когда запускается AJAX Request #1, требуется самое новое состояние script A для выполнения ответ на AJAX Request #1. Иногда это срабатывало, а иногда нет, и я не мог понять, почему, потому что мой сервер всегда отвечал кодом состояния 200, но иногда и необновленным ответом (показывая мне, что "старый" script A имеет требуется на стороне сервера для создания ответа на AJAX Request #1).

Покопавшись немного глубже, я узнал об OPcache (https://www.php.net/manual/en/book.opcache.php). При проверке с помощью phpinfo() я подтвердил, что он работает на моем сервере, поэтому я думаю, что причина в этом. Мой требуемый script A может быть кэширован, и, следовательно, это не всегда обновленный script A, который используется на каждом AJAX Request #1.

Моя идеальная цель - перезагрузить новейший script A через require script A оператор сценария PHP, который отвечает на AJAX Request #1 на каждый отдельный запрос.

Затем я наткнулся на следующие функции, по которым мы переходим к своим вопросам:

  • opcache_is_script_cached()
  • opcache_invalidate()
  • opcache_reset()

Мои вопросы:

1) Если я использую opcache_is_script_cached() для проверки если соответствующий файл script A находится в моем opcache, я странно получаю 1 в качестве ответа, а не TRUE, как сказано в справке, поэтому я, прежде всего, не уверен в интерпретации этого 1 как логического 1, что означает, что соответствующий script A действительно находится в opcache? Если нет, то что еще означает этот ответ 1 и почему ответ по умолчанию TRUE или FALSE не отображается?

2) Сначала я подумал об использовании opcache_invalidate() для удаления script A из кеша перед оператором require script A, но затем прочтите в примечании участника, что этого на самом деле недостаточно, чтобы гарантировать удаление сценария из opcache (https://www.php.net/manual/de/function.opcache-invalidate.php) ?? Следовательно, единственное решение, которое я вижу, - это изменить код в моем серверном сценарии PHP, отвечая на AJAX Request #1, с:

require script A;

на:

opcache_reset();

require script A;

Поскольку у меня нет опыта работы с opcache, я боюсь сразу же это проверить. Также я не знаю, что это включает: сценарий этого вопроса запускается на странице моего бэкэнда, поэтому, например, было бы не лучше очищать весь opcache, и через это также повторно увеличить интерфейсный скрипт требует загрузки et c., при каждом запуске AJAX Request #1. Другими словами, это opcache_reset() единственное решение, которое мне нужно для достижения того, что я хочу, и что именно оно включает / удаляет из opcache?

...