Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: exec()
Forum PHP.pl > Forum > PHP
Athlan
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.
everth
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.
Athlan
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.