-piotrek-
24.01.2012, 15:49:46
Witam,
Muszę w pracy zrobić malutki projekcik w php. Niestety nigdy nie miałem z nim praktycznie nic wspólnego. Potrafię jednak programować w innych językach.
Problem wygląda następująco:
Koniecznym jest wywołanie mechanizmu przetwarzającego dane w bazie danych (proces trwa ok 15 min). Jest tabelka w bazie (MySQL) do której raportuje etapy przetwarzania danych takie jak np. rozpoczęcie i zakończenie. Niestety w jednym momencie może trwać tylko jedno przetwarzanie danych.
Pierwszym etapem skryptu php jest odpytanie z bazy czy proces przetwarzania trwa (został uruchomiony przez innego użytkownika). Jeśli nie proces przeliczania jest uruchamiany. Jeśli nie, na stronie ma być wyświetlony komunikat typu "przetwarzanie jest w trakcie realizacji". Mechanizm takowy zaimplementowałem, i od strony kodu wygląda to dobrze. Rezultat jest taki, że jeśli wywołam skrypt raz i po kilku sekundach chce wywołać go kolejny raz (chce przetestować wyświetlanie komunikatu), drugie wywołanie będzie czekało na zakończenie pierwszego i dopiero się wywoła. Jak zaradzić takiej sytuacji? Znając życie problem jest w moim brak znajomości ogolnej php.
Byłbym bardzo wdzięczny za pomoc,
Pozdrawiam
rocktech.pl
24.01.2012, 16:16:08
Witam.
Tu masz rozwiązanie i opis problemu..
Zamykaj połączenie:
function CloseConnection() {
header("HTTP/1.0 204 No Content"); }
-piotrek-
25.01.2012, 08:52:45
Dzięki za odpowiedź. Niestety nie do końca w tym przypadku jest ona rozwiązaniem. Nie wspomniałem o tym ale niestety w trakcie przetwarzanie pierwszego wywołania muszę utrzymywać połączenie. Powodem jest raportowanie do przeglądarki źródła pierwszego requestu o każdym etapie przetwarzania danych. Masz może pomysł na rozwiązanie takiej modyfikacji problemu?
rocktech.pl
25.01.2012, 08:58:07
Nie testowałem tego ale tak kombinuję, że możesz spróbować wysłać 2 żądanie do innej subdomeny wskazującej na ten sam skrypt.
Jak wykombinujesz daj znać. Chętnie się dowiem jak to obejść bez zamykania połączenia.
P.S.
Generalnie jak użyjesz jakiegoś starszego browsera to problem nie występuje
-piotrek-
25.01.2012, 15:04:52
Obszedłem problem w następujący sposób. Stworzyłem trzy skrypty php:
1. Wyświetlający informację o wykonywaniu się przetwarzania danych.
2. Przetwarzający dane.
3. Sprawdzający czy trwa przetwarzanie danych. Jeśli nie robi przekierowanie do skryptu nr 2. Jeśli tak przekierowuje do skryptu nr 1.
Dodatkowo skrypty 1 i 2 ma zabezpieczenia przed uruchamianiem bezpośrednio tych plików.
Niby wszystko wygląda ok, ale jednak coś mi tutaj nie pasuje.