Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wywolanie skryptu ze skryptu - "w tle"
Forum PHP.pl > Forum > PHP
radzaw
Chodzi o wywolanie innego skryptu ze skryptu, aby jeden sie zakonczyl i wyswietlil wyniki, a drugi by sobie cos robil w tle ?

istnieje jakas metoda dzialajaca w prawie kazdym srodowisku (niezaleznie od platformy, ustawien php itp...) ?

wymyslilem narazie tylko system("php -q skrypt.php &"); ale domyslam sie, ze nie bedzie dzialac na wiekszosci serwerow (ze wzgledow bezpieczenstwa, pewnie system() jest wylaczony).
MaKARON
Mozna wylaczyc przerywanie generowania i odpalic skrypt jako np obrazek... Nie wiem czy o to chodzi i czy to jest optymalne ale chyba dobrze kombinuje smile.gif
rzseattle
hmm- troche zakreciles ale mysle ze include('plik') ew require() lub require_once() na koncu skryptu wystarczy. Wiec nierozumiem po co to zamieszanie z system skoro mozesz zrobic [php:1:53727001f6]<?php
require('skrypt.php');
//zamiast
//system("php -q skrypt.php &");
?>[/php:1:53727001f6]
adwol
Cytat
hmm- troche zakreciles ale mysle ze include('plik') ew require() lub require_once() na koncu skryptu wystarczy. Wiec nierozumiem po co to zamieszanie z system skoro mozesz zrobic

Nie o to chodzi. To tylko wstawi i zinterpretuje kawałek kodu z innego pliku, a pytanie było o stworzenie drugiego niezależnego procesu, który by robił coś w tle pozwalając jednocześnie głównemu skryptowi na oddanie sterowania do serwera.

Myśle, że to sprawa nie jest taka prosta jeśli wykluczasz używanie funkcji system i podobnych. W przypadku php uruchamianego z CGI możesz dodatkowo użyć funkcji pcntl_fork, ale ogranicza Cię to do platformy uniksowej.
rzseattle
Cytat
Nie o to chodzi. To tylko wstawi i zinterpretuje kawałek kodu z innego pliku, a pytanie było o stworzenie drugiego niezależnego procesu, który by robił coś w tle pozwalając jednocześnie głównemu skryptowi na oddanie sterowania do serwera.
W takim razie zle zinterpretowalem pytanie i teraz pojawia sie moje pytanie - Po co?questionmark.gif tzn. do czego mozna wykorzystac takie rozwiazanie, chyba ze skrypt ma zostac aktywny przez dluzszy czas (jakies powazne petle itd) inaczej to......... jestem ciekaw
spenalzo
Cytat
W takim razie zle zinterpretowalem pytanie i teraz pojawia sie moje pytanie - Po co?questionmark.gif tzn. do czego mozna wykorzystac takie rozwiazanie, chyba ze skrypt ma zostac aktywny przez dluzszy czas (jakies powazne petle itd) inaczej to......... jestem ciekaw

Przykład:

wysyłka 30000 listów emailowych.

1. Wchodzimy na stronę wyslij.php ktora wyglada mniej wiecej tak:
[php:1:4c117f3466]<?php
set_time_limit(0);
ignore_user_abort(true);
echo "<meta http-equiv="Refresh" content="5; URL=innastrona.php">";
echo "Wysyłanie rozpoczete.";
for($i=0; $i<30000; $i++)
{
...
mail...
...
}
die();
?>[/php:1:4c117f3466]
2. Wysyłanie się kontynuuje w tle (chyba że serwer zakończy żywot :-)).
3. Możemy w tym czasie wykonywać inne prace nie narażając skryptu na powtórne uruchomienie.
MaKARON
W takim wypadku chyba moje rozwiązanie jest poprawne! 1.php wyswietla napis (o rozyslaniu i obrazek 2.php). 2.php wylacza przerwanie skryptu (int ignore_user_abort ( [bool setting])) i rozsyla maile - jezeli to na prawde bedzie dlugo trwalo, to powinienes jeszcze ustawic czas (void set_time_limit ( int seconds)). To chyba wystarczy.
rzseattle
poprostu jeszcze sie nie spotkalem z sytuacja jak powyzej - nawet przy w miare duzych operacjach sever wykonywal je na tyle szybko ze mozna bylo poczekac te co najwyzej kilka minut (stworzenie miniaturek dla 400 jpg) ale pamietajmy ze tak duzych operacji nie robimy codziennie a maile jezeli wysylasz raz dziennie to mozesz chwilke zaczekac i dopiero po wykonaniu operacji zrobic print"zrobione";

no ale nieukrywam ze brak mi doswiadczenia w takich przypadkach i moja wypowiedz to czyste teoretyzowanie smile.gif
radzaw
Cytat
... ze mozna bylo poczekac te co najwyzej kilka minut (stworzenie miniaturek dla 400 jpg)...

ale jak zamkniemy okno przegladarki lub zmienimy strone to reszta skryptu idzie do /dev/null smile.gif a mi chodzi o to, zeby uruchomic kompletnie niezalezny, nic nie zwracajacy skrypt, ktory by sobie np. liczyl cos lub wysylal maile.
ale chyba jednak tak sie nie da :/
moze w php6 jakos sie bedzie dalo : )
rzseattle
Cytat
ale jak zamkniemy okno przegladarki lub zmienimy strone to reszta skryptu idzie do /dev/null
makaron juz ci napisal ze mozna wykorzystac [manual:fd2204fc9d]ignore_user_abort[/manual:fd2204fc9d]
MaKARON
Widze że ze względu na brak avatara jestem całkowicie ignorowany. Podałem dwa razy gotowe rozwiązanie przy drugim przytaczając nawet nagłówki potrzebnych funkcji ale Ty tego nie czytasz!
radzaw
sorki MaKARON, o ile do mnie ta riposta smile.gif
czytalem, ale rowniez poprzez php.ini mozna to bardzo prosto wylaczyc i bardzo czesto jest wylaczone ("Safe mode"), ale dzieki za kolejna podpowiedz
adwol
Stawiasz za dużo ograniczeń. Safe mode wyłącza w ogóle możliwość uruchamiania nowych procesów, więc w tą stronę raczej nie pójdziesz. Powiedz co chcesz dokładanie zrobić, może da się to rozwiązać inaczej.
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.