![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 21.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Chciałbym się najpierw przywitać bo to mój pierwszy post. Wracając do tematu. Mam problem z długo wykonującym się skryptem php, który tworzę na potrzeby pracy dyplomowej. Skrypt ten zaczytuje zawartość innej strony www do dalszej analizy. Wszystko już mam, tzn. z czytywanie, znajdowanie interesujących mnie danych i wszystkie interesujące dane zapisane mam w zmiennych php, które zapisuję do bazy MySQL. Mam jednak problem z wyświetleniem tzn. jak normalnie dam np. echo "Cena: $cena" to muszę czekać na efekt do końca skryptu, który w zależności od zadanych parametrów może trwać nawet kilkanaście godzin(testowo zadane parametry uruchomiają go na 1-2 minuty). Docelowo ten skrypt ma chodzić te kilkanaście godzin, ale chciałbym w międzyczasie widzieć co już znalazł, aby było widać efekt jego działania. Dam jakiś przykład dla zobrazowania:
Moje rozwiązanie, które mnie nie do końca zadowala to użycie flush, które wyrzuca dane co jakiś czas do przeglądarki.
Niestety nie wiem jak przewinąć automatycznie okno przeglądarki do ostatniego wiersza w wynikach( po 10 kolejnych flush-ach treść jest większa od okna przeglądarki i pojawia się pasek boczny, kolejny flush muszę przewijać niżej itd.) i jak wyczyścić okno przeglądarki co np po 50 iteracjach, żeby nie zawiesić jej całkowitym wynikiem. Najbardziej interesowała by mnie możliwość wrzucenia wyników skryptu do np. textarea i wyniki ostatnio wykonanej iteracji byłyby na samej górze lub ewentualnie mogą być na dole, ale wtedy pole musi się przewijać do ostatniej linijki(aby cały czas były widoczne ostatnio znalezione dane). Linijek będzie docelowo ok 12 400 więc nie wiem czy czyszczenie nie wchodziłoby w grę. Po stworzeniu kombinacji:
niestety flush wykonuje się jakby jeden raz i nie spełnia dalej swojej roli. Zastanawiałem się również nad używaniem Ajax lub nawet ramek (IMG:style_emoticons/default/worriedsmiley.gif) Przepraszam za to "powieść". Mam nadzieję, że napisałem to w miarę zrozumiale i proszę o jakąś podpowiedź. Dziękuję za odpowiedzi. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Stwórz dwa skrypty i jeden plik .html:
1. Odpowiedzialny za pobieranie stron i ich parsowanie (tzw. serwer) - parsowane dane zapisujesz do pliku(np. godzina_minuta_sekunda.txt). Plik ten odpalasz z poziomu konsoli 2. Drugi skrypt to tzw. klient. Jego zadaniem będzie sprawdzanie czy powstał jakiś nowy plik i wyświetlanie jego zawartości 3. Plik index.html, który za pomocą ajaxa będzie odpalał klienta co XX sekund i tworzył nowe okienko dla zwróconych przez niego danych. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
A co gdyby pobierać dane z wielu stron jednocześnie? Może byłoby szybciej niż kilkanaście godzin?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 21.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Stwórz dwa skrypty i jeden plik .html: 1. Odpowiedzialny za pobieranie stron i ich parsowanie (tzw. serwer) - parsowane dane zapisujesz do pliku(np. godzina_minuta_sekunda.txt). Plik ten odpalasz z poziomu konsoli 2. Drugi skrypt to tzw. klient. Jego zadaniem będzie sprawdzanie czy powstał jakiś nowy plik i wyświetlanie jego zawartości 3. Plik index.html, który za pomocą ajaxa będzie odpalał klienta co XX sekund i tworzył nowe okienko dla zwróconych przez niego danych. dzięki za odpowiedź, ale nie wiem czy to nie jest za bardzo skomplikowane rozwiązanie tylko do wyświetlania. Ja dane zapisuje do bazy danych i na niej się później opieram w analizach. Chciałem jedynie jakoś pokazać jak mój skrypt pracuje. Zastanawiam się czy opierając się tylko wyłącznie na Ajax nie dało by się tego ugryźć. Moja wiedza na temat Ajax jest podsatwowa. Nie wiem za bardzo, czy można byłoby Ajaxsem pokazywać w textarea wynik z skryptu php wyrzucany przez flush. takie działanie najbardziej byłoby dla mnie pożądane. Do wNogachSpisz: Co do tej podpowiedzi to ok, ale dla mnie nie jest aż takim problemem te kilkanaście godzin, a chodziło mi bardziej o wyświetlanie. Już pracuję nad przyśpieszeniem skryptu i tak w mojej ocenie zejdę do 3-4 godzin (ale to maksymalnie). Jednak jest to dużo bo mój promotor czy recenzent mogą nie zgodzić się aż tyle czekać na wyniki (IMG:style_emoticons/default/wacko.gif) Dzięki za odpowiedzi |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Samym AJAX'em tego nie zrobisz, dlaczego? Ponieważ każde żądanie wysyłane przez AJAX'a będzie na nowo odpalało ten sam skrypt - stąd podałem przykład z pseudo serwerem i klientem. Samo stworzenie trzech plików nie jest czymś skomplikowanym (główną część masz już napisaną) a plik sprawdzający bazę i wyświetlający wynik do raczej pikuś (IMG:style_emoticons/default/smile.gif)
Ten post edytował CuteOne 21.09.2012, 11:57:07 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
W PHP ciężko robić kilka czynności jednocześnie, bo php to jednowątkowe środowisko. Jedyna opcja to kilka procesów skomunikowanych między sobą czy to za pomocą bazy danych, czy socketów, czy shared_memory.
Za to JavaScript do takich zastosowań nadaje się wyśmienicie, a od kiedy wprowadzono "workery", pisanie takiego softu to sama przyjemność. Czy to musi być w PHP? Ten post edytował wNogachSpisz 21.09.2012, 12:13:29 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 20:45 |