![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 10 Dołączył: 17.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
dopaliłem taki skrypt na serverze www Jak to zatrzymac (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) Ten post edytował Trojan 18.01.2008, 00:10:13 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 275 Pomógł: 44 Dołączył: 23.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
dopaliłem taki skrypt na serverze www Jak to zatrzymac (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) Przykładowo zrestartować serwer, poczekać aż skrypt sam się zakończy (PHP przeważnie ma limit czasu wykonania), albo poczekać aż system się wywali. Ciekawi mnie jeszcze, co przyszło ci do głowy, żeby napisać taki skrypt? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 2 Dołączył: 5.01.2008 Skąd: Jelenia Góra Ostrzeżenie: (0%) ![]() ![]() |
Bądź cierpliwy... sam się zatrzyma (IMG:http://forum.php.pl/style_emoticons/default/thumbsupsmileyanim.gif)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 470 Pomógł: 75 Dołączył: 21.09.2005 Skąd: że znowu Ostrzeżenie: (0%) ![]() ![]() |
Cytat (PHP przeważnie ma limit czasu wykonania) fakt ma ale jak widać limit został wyłączony (no chyba że ma wyłączone modyfikacje) Cytat Bądź cierpliwy... sam się zatrzyma z pewnością - jak braknie miejsca na dysku jak masz dostep do konsoli to albo reset serwera www albo kill procesu php |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 10 Dołączył: 17.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Udało się ;] Skrypt zdążył stworzyć 5000 folderów zanim udało mi się to zatrzymać.
Umieściłem go na serwerze yoyo.pl (mam do niego dostęp tylko na ftp) więc nie mogłem zrestartować, wyłączyć procesu ani nic z tych rzeczy ;/ W skrypcie dałem na początku set_time_limit" title="Zobacz w manualu PHP" target="_manual (10); niestety nie zadziałało (o dziwo ignore_user_abort" title="Zobacz w manualu PHP" target="_manual (TRUE); oraz set_time_limit" title="Zobacz w manualu PHP" target="_manual (0); działa) zanim zorientowałem się ze skrypt pracuje dalej, było już ponad 500 folderów -pierwsze co zrobiłem wywaliłem plik php którym wywołałem skrypt (nie pomogło) -zmieniłem nazwę folderu w którym były tworzone następne foldery (nie pomogło) -nawet stworzyłem folder o nazwie która miała się zaraz pojawić w nadziei że skrypt nie zdoła stworzyć go jeszcze raz. (zgadnijcie co) Jedynym rozwiązaniem było usuniecie folderu w którym są tworzone następne. Wszedłem na FTP-a zaznaczyłem folder i dałem usuń… niestety więcej folderów powstawało niż było kasowanych. Trzeba było usunąć wszystkie foldery jednocześnie – tylko jak (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Znalazłem w necie funkcje:
Odpaliłem na serwerze i czekam... Strona przestała się wczytywać na FTPa też nie mogłem wejść - coś się działo. Po 5min folderów juz niebyło ;] Pytanie jednak nadal pozostaje aktualne: W jaki sposób zatrzymać pętle jeżeli w skrypcie mamy: ignore_user_abort(TRUE); set_time_limit(0); (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 275 Pomógł: 44 Dołączył: 23.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Pytanie jednak nadal pozostaje aktualne: W jaki sposób zatrzymać pętle jeżeli w skrypcie mamy: ignore_user_abort(TRUE); set_time_limit(0); (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Prosto: nie pisać tak durnych skryptów... To rozwiąże większość problemów. Jak tworzysz jakąś pętle, to zawsze dawaj w programie jakiś warunek któy zakończy tą pętlę. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 116 Pomógł: 119 Dołączył: 10.05.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Prosto: nie pisać tak durnych skryptów... To rozwiąże większość problemów. Jak tworzysz jakąś pętle, to zawsze dawaj w programie jakiś warunek któy zakończy tą pętlę. Oj nie gadaj. W etapie deweloperskim czasem zdarzają się takie wpadki. Każdy jest tylko człowiekim i każdy może jakiś błąd popełnić podczas pisania. Jedyne wyjście z takiej sytuacji to DOKŁADNIE przetestować wersję oprogramowania zanim wrzuci się ją na serwer produkcyjny. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 10 Dołączył: 17.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Następnym razem 2 razy się zastanowię zanim dam taki skrypt na serwer.
A wracając do sposobu zatrzymania, tylko restart serwera pomoże ? Dziwi mnie brak jakichkolwiek innych opcji... |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 0 Dołączył: 11.03.2007 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
1. Zawsze sprawdz skrypt u siebie na komputerze, gdzie PHP ma standardowo 30 sekund na wykonanie skryptu po czym ma timeout (sam sobie skrypta zapetlilem, bo wpisalem continue zamiast break (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) )
2. Zawsze na wszelki wypadek ustaw jakis warunek pod ktorym robi break |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 470 Pomógł: 75 Dołączył: 21.09.2005 Skąd: że znowu Ostrzeżenie: (0%) ![]() ![]() |
Cytat A wracając do sposobu zatrzymania, tylko restart serwera pomoże ? Dziwi mnie brak jakichkolwiek innych opcji... nie ma magicznego sposobu w stylu opcji przerwij skrypt - php jest skryptem interpretowanym "linia po lini" od początku aż do końca lub napotkania błędu - nie ma mozliwoścu ustawienia np osobnego wątku/ który będzie czekał na sygnał zamknięcia. Ale jak już na siłę chcesz to można np w pętli dać warunek sprawdzania czy istnieje jakiś plik na dysku, który skrypt sam na początku utworzy - jesli plik raptem zniknie - to exit - taka łopatologiczna kontrola procesu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#11
|
|
Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
EDIT: Dziwne, skrypt zatrzymywało, a katalogi tworzy dalej. Ten post edytował webdicepl 18.01.2008, 23:36:23 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 470 Pomógł: 75 Dołączył: 21.09.2005 Skąd: że znowu Ostrzeżenie: (0%) ![]() ![]() |
a co to da skoro parametr musisz przekazać przy wywołaniu? nie masz kontroli nad czasem trwania skryptu i możliwości przerwnia go w dowolnym momęcie.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 10 Dołączył: 17.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Index.php
ustawienia.php
Takie coś może być (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (to tylko przykład) |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 275 Pomógł: 44 Dołączył: 23.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Index.php
ustawienia.php
Takie coś może być (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (to tylko przykład) A w któym momencie przypisujesz na zmienną $zmienna wartość 'stop' (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Ten skrypt się nie zatrzyma... |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 470 Pomógł: 75 Dołączył: 21.09.2005 Skąd: że znowu Ostrzeżenie: (0%) ![]() ![]() |
otóż zatrzyma jesli w trakciejego działania w pliku ustawienia.php zmienimy aktualną wartość na wartość stop ale jest to dość wolne rozwiązanie - ja nadal proponuje sprawdzać czy plik istnieje zamiast załączac i interpretować dodatkowy kod (jest to wolniejsze i w pewnym momęcie prawdopodobnie nastąpi coś w stylu przepełnienia z powodu braku pamięci).
a jak już się przy tym upierasz to zrób tak:
i ustawienia.php (dla skryptu który ma działać)
lub dla zatrzymania
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 02:26 |