Будет ли PHP-скрипт поддерживать свой сеанс, если он запускается через exec? - PullRequest
2 голосов
/ 11 января 2010

Я хотел бы запустить сценарий PHP из другого сценария PHP, чтобы родитель с успехом возвращался при запуске дочернего сценария.

Родитель будет инициирован из браузера, в котором я использую сеансы. Сможет ли дочерний скрипт использовать те же переменные сеанса и переменные сеанса, если он выполняется через exec?

Спасибо всем за помощь

Сценарий

Я увольняю родителя через AJAX. После того, как я это сделаю, я хочу, чтобы родитель запустил ребенка и вернулся. Дочерний сценарий займет некоторое время. Родитель вернет успех, чтобы указать, что он запустил дочерний элемент. Затем пользователь будет перенаправлен на другую страницу.

Ответы [ 3 ]

2 голосов
/ 11 января 2010

Как говорили другие, это не сработает.

Но вы можете сделать ignore_user_abort( true );

Это продолжит работу скрипта, даже если пользователь закроет свой браузер.

Итак, ignore_user_abort, включите массивный дочерний скрипт в родительский, чтобы вы получили переменные сеанса и все, и у вас все будет хорошо.

2 голосов
/ 11 января 2010

Если вы хотите запустить скрипт PHP из скрипта PHP, почему бы просто не сделать:

require 'child.php';

Если вам нужно что-то сделать в фоновом режиме, используйте AJAX для запуска запроса.

Редактировать: нет никаких причин, по которым AJAX-запрос не может быть длительным, но вы выходите за рамки того, для чего PHP действительно был разработан. Но в любом случае, откажитесь от AJAX-запроса. Если для возвращения потребуется 20 минут, это не драма.

В качестве альтернативы вы можете запускать запрос AJAX каждые 15 секунд (выбрать номер), чтобы проверить статус того, что вы начали.

Для действительно длительных задач вам, вероятно, придется применить подход «забей и забудь». Запустите его и немедленно вернитесь. Но у него не будет информации о сеансе. Вам нужно будет хранить это.

Я бы предложил использовать какой-нибудь механизм персистентности, такой как таблица Джобса:

  • Задание: идентификатор, запущен_, статус (не запущен, выполняется, завершен), запущен, когда завершен,

и вместо запуска таких заданий, как exec (), есть задание cron, которое ищет задания, которые нужно запустить, и запускает их. Это будет менее хрупким, чем подход, инициируемый веб-сервером.

У вас также будет отчет о состоянии, который вам нужно будет задать, если работа еще не завершена.

0 голосов
/ 11 января 2010

Ответ нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...