Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Uruchamianie skryptu php "w tle"
siewca
post 21.01.2011, 18:59:35
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 15.11.2008

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


Witam
Szukam metody na uruchomienie skryptu w tle.
Mam plik A, B oraz C
Chciałbym zrobić aby użytkownik po wypełnieniu formularza i zapisaniu go w bazie poprzez skrypt w pliku A został przekierowany do pliku B gdzie będzie podsumowanie, w tym czasie zostanie uruchomiony skrypt w pliku C. Ale tak żeby użytkownik nadal pozostał na stronie B.

Myślałem żeby wykorzystać Ajax i przesłać do pliku C jakiś parametr metodą GET lub POST
np. wysyłam przez GET: parametr=on
a w pliku C umieszczam:
  1. if($_GET['parametr']=='on') {
  2.  
  3. kod który ma się wykonać
  4.  
  5. }


co o tym myślicie? może jest jakieś inne rozwiązanie tego problemu?
Go to the top of the page
+Quote Post
Hekko
post 21.01.2011, 19:03:23
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 23
Dołączył: 1.12.2003

Ostrzeżenie: (10%)
X----


Jeśli w skrypcie nie ma tekstu który ma się wyświetlać to include ?


--------------------
Tani hosting - Hekko.pl | PHP 5.2/5.3/5.4/5.5/5.6 | MySQL 5.5 |
Hosting już od 49 zł rocznie! Domena pl do każdego pakietu!
Go to the top of the page
+Quote Post
siewca
post 21.01.2011, 19:11:31
Post #3





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 15.11.2008

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


Nie było by problemu właśnie gdyby nie to że w pliku C jest skrypt który powoli się wykonuje, około 15 sekund, więc użytkownik w tym czasie nie mógłby przeglądać strony.
Go to the top of the page
+Quote Post
Kildyt
post 21.01.2011, 20:11:46
Post #4





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


Chmm.. może curl (o ile jest możliwość zerwania połączenia, nie wiem)?
Wstawienie niewidocznej pływającej ramki byłoby uciążliwe dla odwiedzającego ze względu na status ładującej się strony.
Spróbuj także wysłać zapytanie do serwera (np. cron, ale coś innego na co skrypt nie będzie musiał czekać) (patrz: shell_exec, system) jeżeli na serwerze nie masz wyłączonych tych funkcji.
Najłatwiej będzie wstawić skrypt javascript do zwracanego kodu HTML, który wyśle zapytania AJAX-em o plik. W takiej sytuacji musisz jednak pamiętać o użytkownikach/botach, które nie wspierają js-a.

Ten post edytował Kildyt 21.01.2011, 20:29:02


--------------------
Go to the top of the page
+Quote Post
smentek
post 22.01.2011, 23:06:30
Post #5





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Ciekaw jestem co to za skrypt ktory wykonuje sie 15 sekund...

@siewca zwykle chcemy miec pewnosc ze calosc algorytmu jest wykonywana. Nalezy chyba przyjac zalozenie ze i w tym wypadku. Jezeli uzyjemy AJAX czy nawet jakiekolwiek inne wywolanie po stronie serwera tak jak sugerujsz to jaka mamy pewnosc ze C zostanie wykonane?

Nalezy opracowac bufor (tabela w bazie danych) na ktory trafiaja wywołania C (rekordy) ktore sa nastepnie zciagane przez wywolania CRON i wykonywane, jezeli wykonanie sie powiedzie to mozna zdjac rekord z bufora. Wrzucanie na bufor siedzi w A lub B, Zdejmowanie w C lub w czyms co uruchamia C i sprawdza ze C się powiodło.


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post
siewca
post 23.01.2011, 12:32:39
Post #6





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 15.11.2008

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


No właśnie w pliku C jest też funkcja która zapisuje raport w bazie, czyli pomoże mi sprawdzić czy skrypt z pliku C został wykonany.
Pracuję nad wersją z wykorzystaniem parametru wysyłanego GET-em przez Ajax. Zobaczę jak będzie to śmigało smile.gif
Go to the top of the page
+Quote Post
Hekko
post 23.01.2011, 12:34:28
Post #7





Grupa: Zarejestrowani
Postów: 255
Pomógł: 23
Dołączył: 1.12.2003

Ostrzeżenie: (10%)
X----


Ale jeśli użytkownik zamknie skrypt B to C się również nie skończy wykonywać i klops. Najlepiej oprzeć to o cronjobs.


--------------------
Tani hosting - Hekko.pl | PHP 5.2/5.3/5.4/5.5/5.6 | MySQL 5.5 |
Hosting już od 49 zł rocznie! Domena pl do każdego pakietu!
Go to the top of the page
+Quote Post
zegarek84
post 23.01.2011, 12:56:27
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(Hekko @ 23.01.2011, 12:34:28 ) *
Ale jeśli użytkownik zamknie skrypt B to C się również nie skończy wykonywać i klops. Najlepiej oprzeć to o cronjobs.
to, że ktoś zamyka stronę/połączenie nie musi być równoznaczne z tym, iż przerywa pracę naszego skryptu - to my o tym decydujemy...

a pro po tematu - przeanalizuj fragmencik kodu:
  1. echo 'cokolwiek lub nic';
  2.  
  3.  
  4. header('Content-Type: text/html; charset=utf-8');
  5. header('Connection: close');
  6. header('Content-Language: pl');
  7. header('Content-Length: '.ob_get_length());
  8. header('Pragma: public');
  9. header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  10. header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
  11. header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1
  12. header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
  13. header ('Pragma: no-cache');
  14. header('Expires: 0');
  15.  
  16. // a tu poł±czenie już zamknięte jest i rób cokolwiek - tak więc ten plik możesz też z przegl±darki odpalić i i on sobie spokojnie swoje będzie robił - a ze skryptu powyższego fragment odpowiedzi mógłby¶ odebrać po czym sam zamkn±ć poł±czenie - bo odpowiedĽ dostaniesz od razu zanim skrypt skończy się wykonywać - niżej własciwa czę¶ć na któr± nie chcesz czekać....


i jeszcze może: PHP uruchomienie procedury składowanej bez czekania na resultat


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
smentek
post 23.01.2011, 18:25:47
Post #9





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Cytat(zegarek84 @ 23.01.2011, 12:56:27 ) *
to, że ktoś zamyka stronę/połączenie nie musi być równoznaczne z tym, iż przerywa pracę naszego skryptu - to my o tym decydujemy...

Jasne ale nie chodzi o to że uda nam sie uruchomić C, chodzi o to że nie bedziemy mieli pewnosci ze C sie powiodlo. Co bedzie jezeli pomiedzy wywolaniem procedury a zakonczeniem wykonania C pan Mietek wyciagnie wtyczke z serwera i wszystko zdechnie w polowie zadania (przypominam ze mowimy o 15 sekundach dla wykonania programu to jest cała epoka)? Co w takim wypadku ponownie wywola C?

W przypadku bufora z taskami zdejmowanymi przez CRON, mozna zamiescic w jednej tranaskcji zdejmowanie tasku i te operacje ktore robi C. Dzieki czemu mamy absolutna pewnosc ze C zostanie wykonane i ze nie zostanie wykonane parokrotnie.

Oczywisice pod warunkiem ze C nie jest wywolywaniem żądania do jakiejs zdalnej uslugi, ktora nie daje potwierdzenia ze zostala wykonana z powodzeniem, ale to juz inna bajka...

Ten post edytował smentek 23.01.2011, 18:28:31


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 21.05.2025 - 07:44