Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> exec()
Athlan
post
Post #1





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


Witam,

używam funkcji exec() do odpalania pewnych poleceń. Często trzeba czekać po 30 sekund, zanim uzyskam rezultat, a w tym czasie cały serwis się "zawiesza", z tego względu, że (jak wszyscy dobrze wiemy) PHP czeka na odpowiedź execa.

Problemu by nie było, gdybym nie musiał przechwytywać outputu z execa i uruchamiałbym całość z basha, jak to robię zwykle. Działa jako osobny proces, dlatego nie koliduje z systemem. Wiadomo, że output mogę zapisać do pliku i co chwila sprawdzać, czy się coś nie pojawiło, ale nie tędy droga, jest wiele parametrów do tej komendy, które muszę ustawić w php "w locie".

No nic, niestety muszę przechwycić output i moje pytanie jest następujące: jak zrobić, żeby pomimo tego, że PHP czeka na output, uruchomił to jakby w osobnym procesie, tak, aby reszta działała płynnie. Sprawa jest o tyle komfortowa, że proces dotyczy tylko działań administracyjnych, a nie użytkownika, więc nie ma mowy o 'zatkaniu' się serwera.

Może nie doczytałem manuala, ale wertowałem dość sporo. Z góry dzięki za pomoc.

Athlan.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
everth
post
Post #2





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Hmm, chyba nie do końca rozumiem o co ci chodzi. Cały serwer czyli tylko ten konkretny skrypt (np. panel administracyjny)?

W tym drugim przypadku możesz skorzystać z ajaxa - wywoła odpowiedni skrypt i będzie czekał na odpowiedź - przy okazji użytkownik może robić co chce. Problem jest wtedy gdy użytkownik zmieni stronę (nie wychwyci już wtedy odpowiedzi) - ale możesz gdzieś zapisać odpowiedź i parametry a przy każdym ładowaniu panelu sprawdzać ajaxem czy coś się wygenerowało.

W pierwszym wypadku pierwsze co mi przyszło do głowy to przestawienie PHPa na FastCGI.
Go to the top of the page
+Quote Post
Athlan
post
Post #3





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


Problem rozwiązałem stawiając panel admina (na tym samym katalogu) w innym Virtual Hoście. Procesy są wówczas osobne. Panel muli, a strona chodzi. Mozna również do komendy dodać > /dev/null &, wówczas powinna odpalić się w backgroundzie, ale trzeba użyć exec(), a przerzuciłem się na proc_open(), żeby chwytać output.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 19:37