2012-02-17 7 views
3

Этот код:Можно ли одновременно запускать 3 строки кода?

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

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

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

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

+1

@MarkBaker [Обратные кавычки запускать команды оболочки] (http://php.net/manual/en/language.operators.execution.php), из которых [ '/ USR/бен/dig'] (HTTP : //linux.die.net/man/1/dig) является одним. – Powerlord

+0

Я стою исправленный - мой новый бит обучения на день –

+0

Что бы вы предпочли, чтобы ваше приложение выполняло эти 10 секунд? – webbiedave

ответ

0

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

Does PHP have threading?

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

+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительно] (http://meta.stackexchange.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. –

0

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

вот документация для использования Ajax в JQuery

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

0

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

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

1

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

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

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

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

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

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

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

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

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

Надежда, что помогает

+0

Но разве не все поисковые системы все еще выполняются последовательно? Как это изменилось? – webbiedave

1

Существует несколько способов.

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

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

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