2016-10-02 6 views
1

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

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

Я добавил функциональность на свою локальную копию сайта, но для меня слишком медленно публиковать, думать об этом, так же как и текущий опубликованный сайт.

Вы можете увидеть приложение по ссылке: http://www.domainion.co.za

Введите доменное имя (без WWW), и он будет проверять наличие определенных записей.

Это приложение Symfony, я получаю эти записи, запустив несколько операторов exec() с помощью digs для конкретной информации. Причина, по которой мне нравится использовать exec, заключается в том, что если есть несколько возвращенных записей, как и в приведенной ниже команде, она позволяет присваивать каждому результату индекс массива.

рыть -x 154.0.174.35 + короткий @ 8.8.8.8

motairgdiool.hosted.co.za. (индекс 0)

kent.aserv.co.za. (индекс 1)

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

В попытке запустить эти запросы быстрее, я попытался ниже:

shell_exec() - Это занимает примерно в то же время, и возвращает все результаты в виде строки, я не могу использовать это ,

proc_open - занимает больше времени, также возвращает длинную строку.

процесс Symfony() компонент - принимает waaay больше, а также возвращает все результаты в виде одной строки

dns_check_record() - Вы не можете проверить наличие конкретных поддоменов записей

TLDR: Есть любым способом я могу получить записи, которые я хочу (n .domain.tld) ​​и все еще приложить приложение быстро?

Благодаря

+1

Открытие и закрытие виртуальной оболочки (т.е. PTy), как правило, занимает менее 0,1 секунды (вы можете время с помощью 'time script -c true/dev/null', я получаю 0,05 с). Проблема заключается в чем-то другом, например, медленном DNS или дросселировании. –

+0

Есть ли способ конвертировать ваш комментарий в ответ?Так что я могу увеличить его тысячу раз ??? Я предположил, что использование серверов имен Google будет лучшим вариантом, поскольку я доверяю Google больше, чем IDC, на котором размещен сервер. Но да, удаление @ 8.8.8.8 почти утроило скорость, и я разделил страницу статистики с обычной страницы DNS, чтобы сделать ее еще быстрее. Спасибо за помощь! –

+0

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

ответ

4

$ php -r 'var_dump(dns_get_record("35.174.0.154.in-addr.arpa"));'

Возвращает следующий в рамках одной пятой секунды, в том числе ссылаясь на PHP интерпретатора:

array(2) { 
    [0]=> 
    array(5) { 
    ["host"]=> 
    string(25) "35.174.0.154.in-addr.arpa" 
    ["class"]=> 
    string(2) "IN" 
    ["ttl"]=> 
    int(7192) 
    ["type"]=> 
    string(3) "PTR" 
    ["target"]=> 
    string(16) "kent.aserv.co.za" 
    } 
    [1]=> 
    array(5) { 
    ["host"]=> 
    string(25) "35.174.0.154.in-addr.arpa" 
    ["class"]=> 
    string(2) "IN" 
    ["ttl"]=> 
    int(7192) 
    ["type"]=> 
    string(3) "PTR" 
    ["target"]=> 
    string(25) "motairgdiool.hosted.co.za" 
    } 
} 
Смежные вопросы