Можно ли запустить 3 строки кода одновременно? - PullRequest
3 голосов
/ 17 февраля 2012

Этот код:

$ip1 = `/usr/bin/dig $host1`;
$ip2 = `/usr/bin/dig $host2`;
$ip3 = `/usr/bin/dig $host3`;

запускается один за другим.Проблема в том, что скорость отклика копания является случайной.Это может быть быстро или более 10 секунд.У меня вопрос: как я могу одновременно запустить эти 3 строки кода на одной и той же странице?

Я готов принять другой подход, например запуск на 3 разных страницах.У меня есть array_chunk($input_array, 3).$input_array - это результат запроса MySQL, который содержит значение, которое я мог запустить в 3 разных поисках выше.Я разделил запрос на 3 части.Теперь проблема в том, что я не знаю, как отправить 3 части на 3 разные страницы и запустить поиск по раскопкам.Я знаю только, как это сделать с помощью формы.Вот почему я показал вам код выше.Я сейчас пустой.

Пожалуйста, помогите мне.Заранее спасибо.

Ответы [ 5 ]

1 голос
/ 17 февраля 2012

Есть несколько способов.

  1. Напишите небольшой скрипт php, который просто возвращает один ip и обновляется в базе данных. Запустите эти процессы с помощью exec (). В основной программе php подождите, пока все статусы процессов не будут «завершены» в базе данных. Получить все результаты от дБ. Примечание: используйте параметр nohup для запуска процесса в фоновом режиме.

  2. используйте php pcntl для достижения вашей цели.

1 голос
/ 17 февраля 2012

Это не многопоточность, также вы пытаетесь запустить 3 поиска на серверах доменных имен, и в зависимости от каждого хоста, времени кэширования вашего NS-сервера или файлов хостов, скорость может варьироваться.

Но если я понимаю, вы можете достичь желаемого с помощью пакетной обработки:

$ dig uol.com.br; dig aol.com; dig nytimes.com

или даже лучше, потому что dig поддерживает это:

$ dig uol.com.br aol.com nytimes.com

Это принесет 3 поиска одновременно, используятолько одна командная строка, объединенная с ';';

Для реализации этого используйте массив:

$hosts[] = 'aol.com';
$hosts[] = 'uol.com.br';
$hosts[] = 'nytimes.com';

passthru('dig '.implode(' ',$hosts));

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

0 голосов
/ 17 февраля 2012

Ну, если он запускается на странице, вы также можете попробовать использовать Ajax, используя некоторую библиотеку javascript, это может быть выполнено очень легко

вот документация по использованию ajax в jquery

http://api.jquery.com/category/ajax

0 голосов
/ 17 февраля 2012

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

http://php.net/manual/en/function.exec.php

0 голосов
/ 17 февраля 2012

Попробуйте идею, представленную в комментарии, второй сверху:

Есть ли в PHP многопоточность?

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

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