Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wywołania systemowe w trybie nonblock
Forum PHP.pl > Forum > PHP
kyeno
Witam na forum!

Szukałem, szukałem i się nie doszukałem - więc piszę.

Czy jest możliwość uruchamiania wywołań systemowych w trybie nonblock?

Dajmy na to, że posiadamy skrypt, który w pętli wywołuje program "wget" z odpowiednimi parametrami i pod koniec każdego obiegu pisze coś w rodzaju "Ok!\n" (na razie bez dokładniejszych analiz wyjścia)

Niezależnie, czy używamy do tego metody system(), czy exec() skrypt taki uruchomiony z przeglądarki (serwowany przez defaultowo skonfigurowany apache1.3+php5) pokaże nam swój content dopiero gdy skończy pętlę i wszystkie wget-y (jeśli wcześniej nie dostanie timeouta)...

Inaczej rzecz się ma, jeżeli skrypt uruchamiany z poziomu powłoki, wówczas sam z siebie działa w trybie nonblock i wypluwa odpowiedni output przy każdym obiegu pętli.

Czy da się zrobić, aby tak samo zachowywał się przy odpalaniu z WWW?
W grę wchodzi zarówno globalna (httpd.conf), jak i lokalna (.htaccess) rekonfiguracja apache, PHP, czy cokolwiek trzeba.

Dla sprostowania dodam, że kiedyś widziałem jakąś opensource-ową galerię, która w ten sposób generowała thumbnaile używając ImageMagick, a więc pewnie też zapętlonych wywołań systemowych do jakiegoś /usr/bin/convert, czy coś. Niestety nie pamiętam co to było, więc nie mogę podejrzeć kodu. sad.gif

Z góry dzięki za wszelkie wskazówki. Pozdrowienia! smile.gif
wlamywacz
Hmmm nie zrobisz tak tego chyba bo php czeka na zakończenie tego system() lub exec(), dokańcza parsowanie skryptu i dopiero wysyła dane do przeglądarki...
kyeno
Wiem, o tym właśnie mówię i zaznaczam, że ten osobliwy sposób działania ma miejsce wyłącznie w przypadku parsowania tegoż PHP przez apache-a, bo "z shella" jest zupełnie inaczej.

Naprawdę nie ma sposobu na zmianę tego zachowania?
wlamywacz
Jest jedna opcja jednak wyklucza ona php musisz użyć do tego perla, sam używam takiego systemu podczas uploadu zdjęć w swoim serwisie. Skrypt perla wywołany ze strony działa sobie i wysyła informację o postępie, następnie pobieram je ajaxem i ukazuje na stronie.
kyeno
Hm, dzięki za sugestię, ale chyba za słabo znam Perla.

Zastanawiałem się wręcz nad AJAXem, który po stronie JS łyknie jednowymiarową tablicę/hasha urli, które trzeba zassać i sam przeiteruje te wartości za każdym razem wysyłając zapytanie do PHP o ściągnięcie pojedyńczego pliku...

"Trochę" na około, ale może...

Gdyby jednak ktoś przypadkiem trafił na ten topic i znał sposób na egzekucję skryptu w trybie nonblock - byłbym bardzo wdzięczny.

Krążenie w kółko tylko dlatego, że "technologia się nie wyrabia" zdaje się mało fajnym rozwiązaniem. :/
pyro
takie cos da sie zrobic...

trocvhe to moze byc skomplikowane, ale np. jak chcesz wykonac iles razy wget'a to mozna w petli je wywolac wykorzystujac ramki, z czego kazdy skrypt jak zakonczy dzialanie wyswietli w kazdej ramce OK, czyli tak jak chcesz, ale wymagałoby to paru manewrów smile.gif
wlamywacz
Technologia się wyrabia jednak chcesz zastosować nie te właściwą.

Drzewo zetniesz nawet nożyczkami potrwa to pół roku, a piłą w 30 minut smile.gif

Użyj js + perl
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.