2012-07-02 2 views
2

Предположим, что существуют две функции PHP.Выполнение PHP-кода через определенное время

function first() 
{ 

    $keyword = $this->input->post('keyword'); 

    //search for the result and show it to users. 
    $this->search->search($keyword); 

    //send the keyword to save it into the db. 
    $this->second($keyword); 
} 


function second($keyword) 
{ 
     //saving a search keyword in the db 
} 

Я хотел бы отправить результат как можно скорее и сохранить поисковое слово в БД.

Однако, я хочу запустить второй скрипт позже после определенного времени.

потому что я хочу доставить результат поиска как можно скорее моему клиенту.

Есть ли способ запустить второй скрипт PHP после запуска первого скрипта PHP?

* I don't want to use Cron Job 
* I wanna run those two script separatly. 
* don't want to use sleep because it will stop the first script for certain times. 
+0

И вы находитесь в среде apache или iis? –

ответ

2

Вам нужно направить его обратно круглый к серверу, но это асинхронный PHP подход работает довольно хорошо (я использую его в течение года, чтобы сделать почти то, что вы, кажется, делают) ,

См: How to run the PHP code asynchronous

+0

Итак, ваша идея заключается в том, что при выполнении другой функции POST выполняется другая функция. Хорошо. Интересно, сколько времени требуется, чтобы отправить новое действие POST. – Jake

+0

Это очень быстро для меня, хотя я никогда не приурочил его, я никогда не видел, чтобы это воздействовало на что-то еще. –

0

Если вы хотите использовать PHP только тогда, насколько я знаю, вы можете использовать sleep(), но задерживает выполнение кода.

Я думаю, что самый простой способ отложить работу - с помощью AJAX. Просто поставьте вторую функцию внутри другого документа PHP и вызовите XMLHTTPRequest() или $.ajax (если вы хотите использовать jQuery) и задержите код в течение нескольких секунд. Вы можете сделать это с помощью setInterval() или с delay() (jQuery).

Просто напишите

delay(2000).function(){ 
    //saving a search keyword in the db 
} 

Помните, что здесь вы должны использовать AJAX, а не PHP-код.

+0

это хорошо .. но не хочу использовать ajax, чтобы это произошло. В настоящее время я использую сервер для мобильных устройств. – Jake

+0

Если вы используете скрипт для мобильных устройств, то jQuery (mobile) и AJAX - лучшие варианты для вас. Но вы решаете, что делать ... Просто проголосуйте :) –

1

Вместо того, чтобы делать веб-запрос от PHP, как предложил Боб Дэвис, я бы инициировал новый HTTP-запрос с html-страницы после того, как страница была показана.

Например:

  1. Клиент делает запрос HTTP (поиск)
  2. Сервер получает материал и возвращает результаты конечному пользователю
  3. Результат HTML содержит фрагмент, например < IMG SRC = "empty.gif? searchterm = mysearch" />, который инициирует другой запрос, когда браузер отображает html
  4. Когда этот другой запрос попадает на ваш сервер, вы можете сохранить поиск в БД

Аналогичные методы используются, например, для отслеживания клиентов, когда вы не хотите, чтобы конечный пользователь должен был ждать ваших показателей.Некоторые моменты:

  • Это довольно просто понять, внедрить и отладить, которые (на мой взгляд) делает HTTP запросы на стороне сервера не являются
  • Это более масштабируемым
  • Это не требует с javascript на, только браузер, отображающий HTML
  • Целью может быть любой сервер в любом месте, который не должен быть доступен с вашего веб-сервера, только для конечного пользователя.
+0

Да, я думаю, его идея хорошая. Я хочу, чтобы PHP поддерживал простой способ решить эту проблему, потому что ожидание ответа до тех пор, пока сервер не завершит расчет, выглядит не очень хорошо. – Jake

+0

Я не думаю, что я полностью понял - так что решение, которое я предложил, - это не простой способ, или? – eis

+0

Я имел в виду идею Боба Дэвиса, которую можно попробовать. Ваша идея - такой же подход, и это хорошо. – Jake

Смежные вопросы