2016-02-10 2 views
0

Я хочу, чтобы создать фоновый процесс в PHPКак создать фоновый процесс в PHP

Я пытаюсь все это с AJAX вызова на стороне клиента и PHP на стороне сервера ..

На самом деле я слом много URLs. Чтобы сделать это, я перечисляю весь URL-адрес лома в текстовой области и отправляю форму с использованием метода POST. Действие формы будет захватывать данные POST и перейти к фоновому скрипту. Как я могу передать много URL-адресов, это может быть 1000, только потому, что я хочу запустить сценарий в фоновом режиме по требованию, и когда он завершит возврат моего вывода в файл или базу данных. (Write Process id в файле или db, я могу сделать)

Я не хочу настраивать задание cron на заднем конце для этого, которое будет работать через 15 минут.

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

Мое понимание в этом случае:

  1. У меня есть форма в странице, на форме представить, я буду называть на PHP скрипт, который будет работать в фоновом режиме.
  2. Фоновый процесс начат и запущен .... работает .... работает ..... работает ......
  3. Я хочу вернуть идентификатор процесса, с которым Идентификатор процесса Идентификатор процесса и предыдущий фон процесс работает .... работает .... работает ..... работает ..........

Он ведет себя, как и другие языки канала, если я прав ..

Я пришел к решению с PHP Код: Я предполагаю, что этот ниже сценарий будет работать так, как я хочу, или мне нужно найти другой способ?

$cmd = "php test.php > testoutput.php 2>&1 & echo $!"; 
exec($cmd, $pid); 
echo "Script Running with ".$pid; 
exit; 

enter image description here

+0

какой же вы хотите точно? можете ли вы объяснить больше? – jilesh

+0

http://stackoverflow.com/questions/45953/php-execute-a-background-process#45966 –

+0

@jilesh, пожалуйста, прочитайте, я снова обновляю свой вопрос. –

ответ

0

Вы не должны этого делать. Код, который вы собираетесь сделать, является ненадежным, трудноподдерживаемым, медленным, а не тем, как вы должны это делать. Да, вы можете сделать так, как Четан уже упомянул такие вещи php execute a background process. Однако это не будет хорошим подходом.

То, что я предлагаю вам это:

а) Создание таблицы базы данных, содержащей описание вакансии, такие как URL, идентификатор, и его статус, так что вы можете фильтровать позже на его основе..

b.) Создайте программу, которая будет управляться супервизором или любым другим управлением услугами, с которым вы знакомы. Таким образом, вы можете создать скрипт, который будет вытаскивать следующую доступную работу из базы данных, когда дополнительный рабочий свободен.

c.) Использовать основной идентификатор этой новой таблицы как «идентификатор задания». Вы можете использовать веб-узлы, например, для отображения статуса клиента.

В идеале вы не использовали бы базу данных для этого, а на самом деле такие вещи, как rabbitmq или любую другую систему очередей или даже такие вещи, как redis.

Надеюсь, это поможет!

+0

Thanx, чтобы отдать свои привет, Но я знаю все эти вещи. Проблема в том, что если я закрою свой браузер, тогда этот скрипт остановится или я изменю навигацию, тогда я остановлюсь. –

+0

Если вы запускаете скрипт с супервизором как отдельный объект, чем он не будет. То же самое не имеет ничего с браузером и пользовательским сеансом. –

+0

привет, я добавил свой quesiotn так же, как этот вопрос здесь http://stackoverflow.com/questions/35336948/how-to-execute-script-in-silent-mode-to-get-rid-from-browser-hang-on –

0

По вашему вопросу и нашей дискуссии, вам не нужно запускать любые хроны вы хотите просто позвонить файл на пользователь попадании.

Вы получите этот идентификатор в файле ниже в пути:

$file  = "/your_path/your_file_name.txt"; 
file_put_contents($file, print_r($pid, true)); 

Если вы хотите добавить идентификаторами

$file  = "/your_path/your_file_name.txt"; 
file_put_contents($file, print_r($pid, true), FILE_APPEND); 

Здесь FILE_APPEND является добавление других идентификаторов в одном файле каждый раз, в противном случае он будет перезаписывать или вы будете генерировать динамическое имя файла

Убедитесь, что вы даете разрешение 777, где вы хотите сохранить свой файл e

+0

Будет ли это решение работать на фоне, и я все еще могу посетить на другой странице после закрытия этого URL-адреса ? –

+0

вы хотите просто поместить этот код после получения $ pid из exec(), и вы получите этот идентификатор в .txt-файле по указанному пути. также вы получите этот идентификатор, используя file_get_contents(), чтобы получить более подробную информацию об этой функции: http://php.net/manual/en/function.file-get-contents.php – jilesh

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