Как сохранить функцию работающей в качестве фонового процесса после redirect ()? - PullRequest
2 голосов
/ 20 января 2012

У меня есть в моем контроллере:

function foo() {
    // my code
    redirect(site_url('competitor/main'), 'refresh');
    $this->foo2();
}

function foo2() {
    // upload a file
}

Как мне сохранить foo2() после использования метода redirect()?

Причина, по которой я хочу вызвать foo2()после redirect() потому что я хочу сэкономить время загрузки.Когда пользователь загружает файл в site_url('competitor/main'), он переходит к функции foo(), затем сразу же перенаправляется обратно на страницу competitor/main и foo2() запускается в фоновом режиме.

Ответы [ 2 ]

1 голос
/ 20 января 2012

Функция redirect() Codeigniter exit s после отправки заголовка местоположения.Итак, вызовите функцию перед перенаправлением.

$this->foo2();
redirect('competitor/main', 'refresh');

Примечание: здесь не нужно site_url(), функция перенаправления добавит его, если вы используете относительный URL.

Я неконечно, что делает foo2(), но это выглядит немного сомнительно ...

Если по какой-то причине вы не можете этого сделать, отправьте заголовок с собственным PHP.

header("Refresh:0;url=".site_url('competitor/main')); 
$this->foo2();
exit;

Когда пользователь загружает файл на site_url('competitor/main'), он переходит к функции foo(), затем сразу же перенаправляется обратно на главную страницу конкурента и foo2() запускается в фоновом режиме.

Вероятно, это не тот способ обработки загрузок, поскольку у вас не будет возможности справляться с ошибками.Есть несколько других способов, которые я могу предложить:

  • Загрузить на другой URL, обработать файл, а затем перенаправить на страницу по вашему выбору (с сообщением о статусе, если хотите)
  • Публикуйте форму для отправки на <iframe>, которая будет поддерживать страницу в ее текущем состоянии.
  • Дополнительно: используйте javascript для загрузки файла с XMLHttpRequest / AJAX.Существует число из скриптов доступных для это .
0 голосов
/ 30 октября 2013

Невозможно продолжать загрузку и перенаправить это же окно в другое место. Пример @Wesley Murch запустит обновление немедленно, но страница загрузится полностью только после завершения загрузки, не экономя время на стороне пользователя.

Вы можете запустить php в фоновом режиме, используя shell_exec, но не для загрузки. Я бы предложил создать всплывающее окно для загрузки с помощью Javascript, если вы хотите, чтобы оно продолжалось в фоновом режиме.

В противном случае попробуйте что-то вроде Uploadify . Это не ускорит загрузку, но покажет пользователю четкий процесс загрузки и обеспечит приятные впечатления.

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