BG Development


  Reply to this topicStart new topicStart Poll

> Външни процеси в PHP, извикване на бинарни програми от php
hristonev
Публикувано на: 22-09-2017, 18:50
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 7
Регистриран на: 19.09.17



Здравейте,

Първо да се представя. Казвам се Димитър Христонев. Разработвам едно приложение и нямам много опит с конкретната задача, затова реших да питам и тук. Нужно ми е да свалям уеб сайтове и после да се занимавам с данните. Използвам Symfony, като фреймуорк. Реших да ползвам външна програма за паяка httrack. Идеята е да викна httrack и след като той свърши да викне мой php скрипт с определени параметри (ID на ред в базата). В началото го направих по следния начин
CODE
shell_exec("nohup sh -c 'prog1 --pram=xyx; php scr1 --param1=xxx' >/dev/null 2>&1 &")
След това ми дадоха идея да си направя баш скрип и на него да подам параметри. По този начин баш логиката си е баш и php праща само параметри и извиква само една команда асинхронно. Всичко, което ми е нужно го има в лога на httrack и затова няма нужда процесите да си говорят, нужно е само да бъда извикан непосредствено след края на httrack. Дали това е най-доброто решение за конкретната задача?
PMEmail Poster
Top
rvc
Публикувано на: 22-09-2017, 19:21
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2453
Регистриран на: 13.05.11



а как ще разбереш че външното приложение в случая httrack е приключило работа?
PMEmail PosterUsers Website
Top
hristonev
Публикувано на: 22-09-2017, 19:48
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 7
Регистриран на: 19.09.17



; изпълнява следваща команда след приключване на предходната, независимо от резултата.
PMEmail Poster
Top
thrawn
Публикувано на: 23-09-2017, 08:19
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 979
Регистриран на: 17.01.17



Всъщност, не. Това е просто сепаратор с който се разделят отделните команди (ако ги напишеш на един ред). Самия шел се грижи за това процесите да се стартират последователно, освен ако изрично не поставиш някой във фонов режим.

Различно поведение би имал ако ползваш логически оператори като сепаратор.
Логическото ИЛИ изпълнява десния оператор само ако левия върне false. От своя страна, логическото И ще изпълни десния оператор само ако левия е true. A стойността на резултата се определя от exit code на процеса (0 или не). Постановката може да се усложни още с директна проверка на exit code. Така би могло да се реализира различно поведение в зависимост от това какво точно се е случило.
PMEmail Poster
Top
uphero
Публикувано на: 25-09-2017, 11:58
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 114
Регистриран на: 06.05.15



Внимавайте с тоя хтт трак, че да не нстанете станете за резил
http://vegastudio.bg/

Това мнение е било редактирано от uphero на 25-09-2017, 11:59
PMEmail Poster
Top
bleit
Публикувано на: 25-09-2017, 16:08
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 432
Регистриран на: 21.01.06



Ползвай Symfony process.


--------------------
"Everybody is identical in their secret unspoken belief that way deep down they are different from everyone else."
PMEmail Poster
Top
hristonev
Публикувано на: 25-09-2017, 19:27
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 7
Регистриран на: 19.09.17



Ползвам този бъндъл.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0