вызов веб-страницы без остановки сценария - PullRequest
1 голос
/ 04 апреля 2011

существует ли какой-либо метод для вызова веб-страницы с использованием curl или чего-либо еще, без остановки вызывающего скрипта?

другими словами:

php code here
.
.
.
.
call_web_page();
.
.
.
php codes 2 here 

скрипт проходит через php-код, затем вызывает веб-страницу и возобновляет php-код до конца, не ожидая результата от вызываемой веб-страницы.

нет необходимости в call_web_page (); чтобы быть функцией, это может быть несколько строк кода для вызова страницы ...

PS: Нет AJAX или EXEC

Ответы [ 5 ]

2 голосов
/ 04 апреля 2011

Вы можете сделать Ajax-запрос к PHP-скрипту, который выполняется после завершения загрузки страницы.Таким образом, вы можете просто сообщить пользователю, что вы ждете ответа, и позволить ему завершить загрузку страницы.Но если вам нужны некоторые данные, которые вы извлекаете, вы можете спрятать элементы реальных страниц и отображать только индикатор выполнения.Затем, когда у вас есть данные, вы можете заполнить их элементами, просто идея .

Обновить, вы можете делегировать задачу процессу, запущенному на компьютере (еслиу вас есть этот уровень доступа)

И взгляните на Асинхронный запуск PHP-задачи возможно, это тоже поможет.

0 голосов
/ 04 апреля 2011

Поскольку PHP не основан на событиях, ввод-вывод будет блокироваться, а поскольку вы отклонили любое решение AJAX / Exec, я не думаю, что вы сможете реализовать это в PHP.

Может быть попробовать с Node, Ruby EventMachine или Twisted Python?

0 голосов
/ 04 апреля 2011

Почему бы просто не захватить страницы и не кэшировать их, скажем, 30 минут (или дольше, в зависимости от содержимого).Тогда вам не нужно ждать каждый раз, когда пользователь открывает страницу.

Вы должны использовать процесс, подобный следующему:

  • проверить, существует ли локальная кэшированная копия / не слишкомстарый
  • если старый / не существует -> fopen удаленный файл
  • открыть локальный файловый кеш
  • повторить столько файлов, сколько вам нужно

Подробнее о SO:

0 голосов
/ 04 апреля 2011

То, что вы хотите сделать, - это выполнять асинхронные вызовы, что достигается путем запуска некоторых потоков paralell и последующего ожидания в определенной точке соединения для завершения всех потоков.

На самом деле в PHP нет поддержки собственной многопоточностино вы можете посмотреть на этот пост: Есть ли в PHP многопоточность?

Есть несколько советов о том, что использовать, если вы хотите реализовать многопоточность в php.

0 голосов
/ 04 апреля 2011

Вы можете выполнить второй скрипт php (или системную команду - например, curl) в качестве фонового процесса, используя метод, подобный этому ответу: php выполнить фоновый процесс


Edit: из-за отсутствия команд exec sys

Вы можете использовать file('http://yourserver.com/another.php');, который делает запрос на запуск другого php-процесса.Файл содержит этот код и возвращается немедленно.Запрос должен выполняться на вашем сервере без выхода в Интернет.

header("Connection: close");
header("Content-Length: " . mb_strlen($response));
echo $response;
flush();
do_function_that_takes_five_mins();

код взят из : Как продолжить процесс после ответа на запрос ajax в PHP?

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