Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: uruchamianie pliku php co 30s bez właczonego kompa - na serwie
Forum PHP.pl > Forum > PHP
Norbit_24
Witam

Czy jest jakakolwiek możliwość uruchomienia pliku php co 30s bez włączonego kompa - na hostingu? Bo w corn da się minimalnie co 1min..

corn nie spełnia moich wymagań (od 1min). Dokładnie potrzebne mi coś takiego, ze jak skrypt spełni jakiś tam warunek to żeby uruchamiał inny skrypt co 30s w określonym czasie. Musi się dać coś takiego zrobić. Tylko nie wiem jak;/



Bardzo proszę o pomoc. 
Z góry dzięki.
phpion
Odpalasz CRONem co 1 minutę, a wewnątrz skryptu puszczasz pętlę, która co każdy przebieg robi sleep(30). Pamiętaj tylko ustawić maksymalny czas wykonania skryptu na 1 minutę.
Norbit_24
Wtedy skrypt będzie się uruchamiał co 30s? A jak będę chciał np. co 29s?

Mi zależy na uruchamianiu, a nie żeby wykonywał się 30s. chce żeby co 30s sprawdzał warunek..

>>I czy jest taka możliwość aby skrypt uruchomił zadanie corn w określonym czasie, a później to przerwał?

phpion
Uruchom sobie ten kod i zobacz co dostaniesz w wyniku:
  1.  
  2. while (TRUE) {
  3. echo date('H:i:s').'<br>';
  4.  
  5. sleep (5);
  6. }

Skrypt chodzi przez 30 sekund i dokonuje przestoju na 5 sekund po każdym przebiegu. Jeżeli jako limit czasowy dasz 60, a jako przestój 30 to uzyskasz to, co chcesz.
Norbit_24
Aha, teraz rozumiem.. Dzięki..




A czy jest możliwość aby skrypt php dodał zadanie corn do directadmin?

Tutaj trzeba użyć chyba curl..



Nikt nie wiem..?
marcus753
Ja bym to zrobił prostolinijnie czyli ustawił bym jednego crona na 1min i drugiego tez na 1 min uruchamiane w odstępie 30s efekt ten sam a co do poprzedniego pytania może zrob skrypt który po spełnieniu jakiegoś warunku nadpisze inny skrypt efekt będzie ten sam a znacznie prostszy pozdrawiam
Crozin
Odpalasz skrypt raz i robisz w nim nieskończoną pętlę. W niej uruchamiasz ten drugi skrypt. Mierzysz czas jego działania. Następnie usypiasz skrypt na 30 - czasWykonywniaSię sekund. Problem mógłby się pojawić jeżeli ten drugi skrypt mógłby się wykonywać więcej niż 30 sekund, a wymagane byłoby bezwzględne uruchamianie co 30 sekund - niestety PHP jest jednowątkowy, więc ominięcie tego mogłoby być problematyczne.

  1. <?
  2.  
  3. while (true) {
  4. $start = microtime(true);
  5. //wywolanie drugiego skryptu
  6. $elapsedTime = microtime(true) - start();
  7.  
  8. $sleep = 30 - $elapsedTime;
  9.  
  10. if ($sleep > 0) {
  11. usleep($sleep);
  12. }
  13. }
zegarek84
Cytat(phpion @ 22.01.2010, 10:36:36 ) *
Uruchom sobie ten kod i zobacz co dostaniesz w wyniku:
  1.  
  2. while (TRUE) {
  3. echo date('H:i:s').'<br>';
  4.  
  5. sleep (5);
  6. }

Skrypt chodzi przez 30 sekund i dokonuje przestoju na 5 sekund po każdym przebiegu. Jeżeli jako limit czasowy dasz 60, a jako przestój 30 to uzyskasz to, co chcesz.

wszystko ładnie i pięknie ale... no błędy się zdarzają ;) - dobrze nakierowujesz ale sam tego skryptu nie uruchomiłeś ;)...
skrypt będzie się wykonywał 30 sekund, ale "pracował" o wiele dłużej ;), sleep wstrzymuje wykonywanie skryptu o zadaną ilość sekund (usypia go) - z gostkiem się umówiłeś, że za 10h pracy zapłacisz mu tyle a tyle, on się zmęczył i chce się zdrzemnąć ;) - swoje potem musi odpracować ;) [głupi przykład ;p]...

i tu właśnie podaje się w sleep parametr po jakim czasie skrypt coś ma zrobić - odnośnie tematu... [pasuje sobie liczyć ile w sumie skrypt "spał" i odejmować od całości czasu by znać czas kiedy się zakończy by samemu go zakończyć a nie padł na zawał i nie po dokańczał niektórych procesów - ale do tego wrócę o co mi chodzi ;)
Cytat(Crozin @ 23.01.2010, 01:17:00 ) *
...niestety PHP jest jednowątkowy, więc ominięcie tego mogłoby być problematyczne...

więc trzeba odpalić kolejne wątki ;) - w sumie to nie takie trudne - ale pasuje pomyśleć jak nad nimi zapanować ;)...

ok... jak odpalić kolejny wątek?? - albo skrypt którego nie chcemy potem nadzorować - wiemy że go uruchomiliśmy i to nam wystarczy (w tamtym skrypcie uruchomionym można zadbać o komunikaty choćby do pliku o wykonaniu "misji")...

jest funkcja ignore_user_abort, która nam trochu może pomóc - a czy przy zerwaniu połączenia przez skrypt jest konieczna to nie pamiętam ;p - dawno jeden test zrobiłem - taki mały cron ale z poziomu php który odpalał sam siebie gdy zbliżał się do "śmierci" i po drodze wykonywał inne operacje - akurat pierwsza wersja była odpalana z przeglądarki i limity ustawione były tak, by było widać procesy i zmiany w nadpisywanych plikach okresowo, potem skrypt sam siebie i inne uruchamiał - i w jednym miejscu miałem zonka bo procesów się narobiło ^^ (ale odbiegam od tematu - wracajmy)...

jeszcze nie wymieniłem wszystkich potrzebnych funkcji ale wcześniej... jak się pomysli kiedy proces sam siebie ma zlikwidować można iść na przód i...

(to było robione w celach "edukacyjnych" - może mi się kiedyś przyda - i pewnie dało się lepiej to obmyśleć ale mi chodziło tylko o ideę czy się da ;p) jest potrzebna np funkcja fsockopen - przy jej pomocy pobierzemy same nagłówki skryptu który chcieliśmy uruchomić i od razu zamykamy połączenie ;) - lub pierwszy znak - chcemy tylko odpowiedź - wady - adres musi być http lub inny ale pełny ;p...

dylematy i pytania??
ale zanim dostaniemy odpowiedź drugi skrypt swoje musi zrobić - czy musimy czekać aż się cały wykona??
nie ;)

ustawiamy odpowiedź na początku, nagłówki z close (jeśli ktoś chciałby przez przeglądarkę zainicjować) i wysyłąmy odpowiedź zanim skrypt skończy się wykonywać - zanim zacznie się robić to co on miał zrobić...
tu taki głupi przykłąd skryptu który wysyła odrazu "bzdurną" odpowiedź:

  1. ini_set('Content-Type','text/html; charset=utf-8');
  2.  
  3. echo 222;
  4.  
  5. header('Content-Type: text/html; charset=utf-8');
  6. header('Connection: close');
  7. header('Content-Language: pl');
  8. header('Content-Length: '.ob_get_length());
  9. header('Pragma: public');
  10. header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  11. header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
  12. header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1
  13. header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
  14. header ('Pragma: no-cache');
  15. header('Expires: 0');
  16. flush(); // tu już nie pamiętam o co chodziło ale ten flush niestety trzeba wymusić bo nie zawsze działał poprawnie - dlatego powtórzenie podobnych funkcji ;p
  17.  
  18. /* tutaj chulaj duszo piekła nie ma ;) - róbta co chceta - nawet ignore_user_abort(true); nie jest tu już potrzebny ;p
  19. ale zadbajcie o jakieś komunikaty, kontrolę przez zapisywanie zdarzeń gdzieś - nie wykonało się poprawnie to trzeba powtórzyć ;p */


a przykładu z fsockopen to chyba nie muszę pokazywać ;p - choć jeśli chcecie to prościej będzie curl ;p - równie dobrze można file_get_contents ;p

UP @phpion - właśnie kończę pisać posta a w skrypcie na tyle często jest to sleep, że on dalej "pracuje" - a raczej "leniuchuje" bo od razu odpoczywa ;) - ale ideę słuszną pokazałeś ;)

ps. nie może to być nieskończona pętla ;) - trzeba kontrolować zakończenie skryptu bo jeśli on jest naglę przerywany z powodu przekroczenia czasu wykonywania to niejednokrotnie nie zakończy kilku rzeczy i może być co innego niż my się spodziewaliśmy przy ostatniej dostępnej a przerwanej pętli... pasuje zliczać czas wykonywania ze sleep, gdzieś podawać na zewnątrz "kontrolkę" np do pliku, że skrypt dalej chodzi i uruchomi się np. o tej i tej - więc próba uruchomienia jego kopii np. przed ta godziną niech po prostu zakończy działanie skryptu i inne "pierdułki" - i tym oto sposobem można napisać pseudo crona w samym php ;) - nadzorowanego np. dodatkowo jeszcze przez crona czy coś nei wyłączyło działania naszego skryptu...

a i ważne - pasuje dać jeszcze w skrypcie jakąś kontrolkę dzięki której moglibyśmy przerwać działanie skryptu ;p... np tworząc jakiś plik ;) - po prostu niech skrypt sprawdza czy plik jest czy go nie ma - jak jest lub w drugą stronę - od upodobań - to niech się wyłączy ;)


to jest takie obejście na "około" ale jakby nie było na przeprowadzonych testach działało... w tym temacie podajecie lepsze rozwiązania niż kiedyś widziałem temat o uruchamianiu co 5s albo coś w stylu crona w php -widziałem coś w stylu samego while(true){coś rób} bez sleep - przecie to by zżarło maszynę ;p

i podsumowanie:
Cytat(phpion @ 22.01.2010, 10:36:36 ) *
Uruchom sobie ten kod i zobacz co dostaniesz w wyniku:
  1.  
  2. while (TRUE) {
  3. echo date('H:i:s').'<br>';
  4.  
  5. sleep (5);
  6. }

Skrypt chodzi przez 30 sekund i dokonuje przestoju na 5 sekund po każdym przebiegu. Jeżeli jako limit czasowy dasz 60, a jako przestój 30 to uzyskasz to, co chcesz.

jeśli tak to ma być...
...to raczej powinno być tak:
  1. /* na starcie coś robisz */
  2. sleep (30);
  3. /* znowu wywołujesz ten skrypt co na starcie */
  4. // bez żadnego while ;)


a wyżej podałem bez szczegółów ogólnikowo przepis na coś ala cron ale w php ;)
Crozin
Normalnie jakbym widział post theka smile.gif

PHP jest jednowątkowy co oznacza, że nie można w nim *normalnie* utworzyć innych wątków - nie ma w nim po prostu mechanizmów współbieżności. Jeżeli miałbyś tak kombinować to daruj sobie i zaciągnij do pracy coś co się nada o wiele lepiej do takiego celu. Niedawno na forum był wątek o tworzeniu deamona w PHP - nie pamiętam już czy ja, czy użytkownik erix, ale podany tam został przykład jak prosto zrobić coś takiego w Javie (równie prosto zrobiłbyś to w innych "nie stricte webowych" technologiach).

A crona możesz użyć co najwyżej do sprawdzenia czy z jakiś powodów deamon nie został wyłączony (np. zawieszenie się serwera) i ewentualnie uruchomić go na nowo w przypadku jego niedziałania.
phpion
Cytat(zegarek84 @ 23.01.2010, 03:49:43 ) *
wszystko ładnie i pięknie ale... no błędy się zdarzają winksmiley.jpg - dobrze nakierowujesz ale sam tego skryptu nie uruchomiłeś winksmiley.jpg...

Uruchomiłem.

Cytat(zegarek84 @ 23.01.2010, 03:49:43 ) *
skrypt będzie się wykonywał 30 sekund, ale "pracował" o wiele dłużej winksmiley.jpg, sleep wstrzymuje wykonywanie skryptu o zadaną ilość sekund (usypia go)

Takie rozwiązanie stosuję u siebie i nie zauważyłem by po przekroczeniu czasu pracy skrypt nadal pracował. Porównując to do pracy: idziesz do roboty, 7 godzin pracujesz, 1 godzinę nie (siku, fajeczka, jedzonko) - czy to oznacza, że musisz zostać 1 godzinę dłużej żeby ją odpracować?
zegarek84
dobra dobra winksmiley.jpg - włącz sobie tworzenie przy tym i usuwanie pliku na przemian żeby było widać w katalogu co i jak winksmiley.jpg - a skoro ma się wykonać tylko 2 razy to po co tutaj pętla while??
phpion
Cytat(zegarek84 @ 23.01.2010, 22:44:44 ) *
dobra dobra winksmiley.jpg - włącz sobie tworzenie przy tym i usuwanie pliku na przemian żeby było widać w katalogu co i jak winksmiley.jpg

  1. <?php
  2.  
  3. while (TRUE) {
  4. $file = fopen(date('His').'.txt', 'w');
  5. fclose($file);
  6.  
  7. sleep (5);
  8. }

Mi powyższy kod utworzył 6 plików w katalogu. Chyba to obaliło twoją (hipo)tezę.

Cytat(zegarek84 @ 23.01.2010, 22:44:44 ) *
a skoro ma się wykonać tylko 2 razy to po co tutaj pętla while??

Po to, że 2 wykonania to w tym momencie przykład.
zegarek84
Cytat(phpion @ 24.01.2010, 12:28:04 ) *
...
Mi powyższy kod utworzył 6 plików w katalogu. Chyba to obaliło twoją (hipo)tezę.
...

(hipo)potama winksmiley.jpg - u siebie xampp'a mam na domyślnych ustawieniach i nie wiem czy znowu będąc pewnym tego co mówisz tak napisałeś i tego nie sprawdzałeś czy nie wiem ;p - którą wersję php też masz?? (może php4 - duże rozbieżności są winksmiley.jpg

u mnie taki skrypt w kółko co 5s tworzy nowy plik ;p...

i co, chyba obaliłem Twoją (hipo)tezę

...
ps. skoro Ty zawodowo programujesz to lepiej poszukaj co może powodować różnicę w działaniu powyższego skryptu u Ciebie w działaniu tego na domyślnych ustawieniach xampp'a - i to nie tej wersji bo już od dawna to pamiętam winksmiley.jpg [ps. uruchamiałem skrypt mimo sceptyczności i tego co pamiętam ;p - system opensuse - ale nie powinno to odgrywać różnicy - na mandrivie dawniej to samo było ;p]
phpion
Cytat(zegarek84 @ 24.01.2010, 20:56:46 ) *
u mnie taki skrypt w kółko co 5s tworzy nowy plik ;p...

i co, chyba obaliłem Twoją (hipo)tezę

I jajco. Powiedz mi w takim razie ile trwa to "kółko". 30 sekund? Ile pojawiło się plików? 6 plików?
zegarek84
do puki wczoraj nie wyłączyłem laptopa gdyż robiłem co innego i troszku imprezowaliśmy ze znajomymi egzaminy ;p - to jest teraz w katalogu 444 pliki winksmiley.jpg - na szczęście nie skasowałem ^^ - byłem zajęty czym innym... ("ćwiczeniem ręki góra dół ^^")
phpion
Dobra, ja się poddaję.

444 pliki powiadasz - ciekawe... czyli o czym to świadczy? Bo powoli zaczynam się gubić. Świadczy to o tym, że set_time_limit() + sleep() nie działa? Czy jak? Jak dla mnie świadczy to o jednym - masz fajne imprezy (uruchamiasz na nich skrypty PHP i "ćwiczysz ręka góra dół" <- to cytat). Jeżeli nie potrafisz skonfigurować PHP tak by działał jak chcesz (w sumie ja nic nie konfigurowałem...) to już nie moja wina. To tak jakbyś się pluł, że mysql_connect() nie działa w momencie, gdy nie masz go włączonego w php.ini.
zegarek84
Cytat(phpion @ 25.01.2010, 12:57:50 ) *
Dobra, ja się poddaję.

444 pliki powiadasz - ciekawe... czyli o czym to świadczy? Bo powoli zaczynam się gubić. Świadczy to o tym, że set_time_limit() + sleep() nie działa? Czy jak? Jak dla mnie świadczy to o jednym - masz fajne imprezy (uruchamiasz na nich skrypty PHP i "ćwiczysz ręka góra dół" <- to cytat). Jeżeli nie potrafisz skonfigurować PHP tak by działał jak chcesz (w sumie ja nic nie konfigurowałem...) to już nie moja wina. To tak jakbyś się pluł, że mysql_connect() nie działa w momencie, gdy nie masz go włączonego w php.ini.

pytanie ile tematów i jakich na forum założyłęm?? - czy prosiłęm się o pomoc?? - raczej nie i to raczej ja staram się pomagać choć nie programuję ;p... na każdym xamppie to działąło wg. mojej logiki ;p - i nie zmieniałem ustawień tylko po to, że są w trybie ograniczeń - ja stwierdzam, że problem zawsze da sie rozwiązać - dlaczego patrząc na mój profil piszesz, że lubię sobie ułątwiaćquestionmark.gif... fakt jedno z rozwiązań które podałęm i jest w algorytmach (ale nie moje rozwiązanie gdyż "normalnie" nie działa) działa tylko na okreslonej wersji php lub xampp (już nie wiem - nie wnikałem) - ale rozwiązanie było logiczne gdyż to była dłuższa operacja w while - w nawiasie - gdzie normalnie takie dłuższe operacje nie działąją,...


umię sobie pod siebie skonfigurować php pod siebie - msql też ;p - a że nie próbujesz wniknąć w problemy - gdyż skoro zawsze tak było nie ocenił bym tego jako mój problem a Twój (a systemy często na różne przeinstalowuję gdyż tesuję...)


...i ok... jestem noob - w Twoim rozważaniu co najwyżej nie powinno działać tylko set_time_limit tak jak sobie Ty założyłęś - a sleep działą gdyż domyślnie skrypty mam ustawione na 60 ;p - a pliki tworzyło znacznie dłużej zważywszy, że katalog sobie odświeżałem i tworzyły się pliki co 5s...

nie chce mi sie dużo pisac bo mi ręce zgrabiały - czekałem 1h i 40min na stacji na pociąg - a i w wagonie jest niewiele powyżej 0 ;/ - a że byłem ciekaw to wpiołem komórkę do laptopa ;p...

i dalej w Twojej tezie jest problem gdyż nieraz już kożystałem z funkcji set_time_limit i działała - ogólnie wszystko działa na moim laptopie - ale problem, że choć nic nie zmieniałem to działa wg. mojej logiki - gdyż powyższa funkcja odwołuje się ale tylko do limitu ciągłej pracy skryptu - a sleep tylko to opóźnia gdyż "hibernuje" proces...


w sumie nie wiem czemu ala tematu cron co już nieraz widziałem czemu cicho nie siedziałem gdyż czułem że bedzie jakiś mały konflikt ;p - no a w temacie zachaczającym tylko o crona w php on wynikłl ;p...

pytanie jaki miałbym powód, żeby kłamać, że tak nie jest?? - tym bardziej, że nigdy nie prosiłem o pomoc, nigdy nie szkodziłem, a zawsze starałęm się pomóc...

odpiszę po 10:30 jeśli coś tu bedzie winksmiley.jpg - gdyż o ile pociąg się nie spó źni w którym deczko marzne to idę na trening.. wowć - ale błedów ;p - za bardzo ręce mi zgrabiały a i się rozgrzewałem dostępnymi środkami...

a i apropo tego co mnie cytowałeś - nie był ow prost napisane ale wystarczy wolniej przeczytać i życie studenckie lub gościa co lubi się zabawić ;p - co niby z kompem mam ćwiczyć jak to tylko moje hobby?? ;;p ^^ - po prostu sobie drinkowałem (ps. mam przetłumaczyć co to słowoo znaczy?questionmark.gif)...

i pisałem - Ty programujesz - niuansy powinny być Twoją domeną...
_________________________________________________________


heh - w wolnej chwili dziś luknąłem w szukajkę na google - znalazłem też trochu na tym forum - ale raczej stwierdzili byście, że to nie istotne - więc od razu do manuala i w komentarzach jest winksmiley.jpg:
http://pl.php.net/manual/pl/function.set-t...limit.php#72167
Cytat(mba_aslam @ 05.01.2007, 01:50:00)
while setting the set_time_limit(), the duration of sleep() will be ignored in the execution time. The following illustrates:
  1.  
  2. while ($i<=10)
  3. {
  4. echo "i=$i ";
  5. sleep(100);
  6. $i++;
  7. }


Output:
i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10

sleep powinien działać zgodnie z logiką u każdego dokładnie tak jak u mnie - zbyt wiele przykładów znalazłem ;p


więc odpalanie powyższego kodu w pętlach while (bez odpowiedniego przerwania tej pętli) i uruchamianie skryptu co minutę cron'em spowoduje natworzenie się procesów (nawarstwienie) i w dodatku odpalanie wielokrotnie określonego skryptu w ciągu minuty ;p (jedno wielkie boom winksmiley.jpg )

pozdro...

ps. wtedy uczyłem się do egzaminów ;p - a że w pokoju wyszły inne plany to laptop sobie chodził jak odpaliłem skrypta bo mnie już nie interesował ;p
phpion
Cytat(zegarek84 @ 26.01.2010, 18:59:35 ) *
więc odpalanie powyższego kodu w pętlach while (bez odpowiedniego przerwania tej pętli) i uruchamianie skryptu co minutę cron'em spowoduje natworzenie się procesów (nawarstwienie) i w dodatku odpalanie wielokrotnie określonego skryptu w ciągu minuty ;p (jedno wielkie boom winksmiley.jpg )

Hmmm, u mnie wynikiem wywołania tego kodu jest:
Kod
i=0 Fatal error: Maximum execution time of 20 seconds exceeded in D:\public_html\index.php on line 10

Zwracam Ci jednak honor - pewnie faktycznie na jakiś ustawieniach skrypt by trwał i trwał. U mnie (wszystko instalowane osobno, właściwie domyślna konfiguracja) kończy swoje działanie po określonym czasie. Również na serwerze produkcyjnym, na którym zastosowałem identyczne rozwiązanie nie widzę żadnego problemu (a tam skrypt chodzi od połowy grudnia 2009 w nieskończonej pętli while() w wywołaniach co 5 minut z set_time_limit ustawionym na 4.75 minuty). Tak więc z opisywanym przez Ciebie zjawiskiem mam styczność po raz pierwszy.

Może ktoś wypowie się na ten temat? Co jest przyczyną tak różnego wykonywania skryptów?
zegarek84
znalazłem kilka odpowiedzi ;) - nie było problemów, gdyż serwer produkcyjny to też Windows w Twoim przypadku ;)

jako, że to już jest znowu rozmowa a nie kłutnai to pogrzebałem w necie i... (odpowiedź mojej interpretacji na koniec - w pierw przykłady)...

choć szukałem pod angielskimi hasłami to nie wiem co wpisałem ale znalazłem polskim forum z nastawieniem ludzi do tego działania jak Twoje - stwierdzali, że to bug (choć to też nie jest bug gdyż jeśli to samo się zrobi w pętli bez sleep to będą identyczne efekty):
neibezpieczne dzialanie funkcja sleep() w PHP - ja uważam, że to bezpieczne [toż samo można zrobić w pętli bez użycia funkcji sleep co oni opisują ;p) i idziemy dalej (chodzi o różne działanie tego)...

dobrze - podałem opinie ludzi, którzy twierdzą, że działąnie funkcji sleep tak jak działa ok dla mnie gdyż dawniej to testowałem i się okazało, że tak zdziała (zresztą jedno zdanie w manualu wskazuje, że tak może być) - a teraz podam tekst, iż to bug w windows, że skrypt zostaje przerwany:
Cytat
It only affects script time not system calls like sleep(). There is apparently a bug where on Windows sleep() is included. Max execution time is about real-time, not CPU time or anything like that.


zmierzajmy do odpowiedzi jak faktycznie jest (a to jeszcze nie ze strony php - powoli do tego dążę ;) ):
Cytat
  1. echo date("H:m:s"), "\n";
  2. for ($i = 0; $i < 100; $i++)
  3. {
  4. sleep(10);
  5. echo date("H:m:s"),"\n";
  6. }
  7. echo "Done!";

Guys! This script runs 100*10 seconds +- few microseconds for circle and output.
But not promissed 30 seconds!!!
set_time_limit sets CPU time! Texted on *NIX.

jedną z odpowiedzi powyżej pogrubiłem ;)

Cytat
Referring the the last 2 comments about whether the duration of sleep() will be counted in execution time, the answer is it depends on the platform. In Linux it does not, while in Windows it does.


i teraz klucz programu - sleep powinien działać tak jak na linuxie ;) (nie stety na windowsie trzeba jeszcze zerować czas wykonania przez ponowne jego ustawienie):
Bug #42787 max_execution_time not working
i odpowiedź muszę zacytować ;):
Cytat
Sorry, but your problem does not imply a bug in PHP itself. For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system is not the
appropriate forum for asking support questions. Due to the volume
of reports we can not explain in detail here why your report is not
a bug. The support channels will be able to provide an explanation
for you.

Thank you for your interest in PHP.

'max_execution_time' really means cpu execution time. sleep() doesnt
consume cpu, so it isn't counted. Anyway, the script won't run forever,
although it may run for a while..


wychodzi na to, że na windowsie mimo sleep chyba jest konsumowane cpu ;) - a i wg. tych definicji które mi pasują i które sprawdzałem to skrypt wykonuje się tyle co max_execution_time - tylko tak jak nazwa wskazuje on idzie "spać" i to się nie liczy, suma sumarum jeśli reszta uznaje to za bug to ja odpowiem, iż tyle samo mogą natworzyć plików w samej pętli while bez sleep jak i z sleep - gdyż skrypt będzie się wykonywał tyle a tyle czasu - tutaj skrypt nie jest zatrudniony na stałe tylko poszedł do pracy dorywczej ;) - płacą mu za to co zrobił ;) - a pro po powyższych przykładów o racę co zaczynaliśmy ;)


a i tu jest jeszcze jedno - ale nikt testów nie przeprowadził tylko padały odpowiedzi na forum - ja tylko dodam od siebie gdyż też mi się testów nie chce przeprowadzać a z powyższego wynika, że inny efekt może być na windowsie

padało często pytania czy uśpiony skrypt pochłania zasoby systemu - z powyższego wynika, że co najwyżej ram ;) - aczkolwiek na windowsie może być inaczej...

phpion
Dzięki za wyczerpującą wypowiedź. Warto mieć na uwadze ten niuans. Wydaje mi się, że rozwiązaniem będzie po prostu pobranie czasu przed wejściem do while() i po każdej iteracji sprawdzanie stosunku $czas_startu + $maksymalny_czas_wykonania do time() i w razie przekroczenia zrobić exit. No chyba, że exit też działa raz tak raz srak biggrin.gif hehehe.
zegarek84
właśnie na tej zasadzie robiłem swojego pseudo cron'a jak rok temu sprawdzałem, czy to zadziała - ale zamiast zliczać stosunki to zliczałem zmienne parametrów sleep a dopiero potem porównywałem z czasem wykonania - tzn miałem czas startu, pobierałem aktualny czas i czas wykonywania liczyłem $wykonywał_się = time() - $start - $suma_sleep
i teraz odpowiednio przed końcem skryptu pasuje samemu zrobić exit gdyż wtedy destruktory zostaną wywołane poprawnie - jeśli tego się nie dopilnuje to różne rzeczy mogą się dziać gdy skrypt zostaje przerwany z powodu zbyt długiego wykonywania zwłaszcza jeśli są przewidziane na zakończenie skryptu gdyż wtedy zbyt nagle skrypt się kończy - po prostu pisałem to jako przygotowanie pod pewnego bota gdzie parametr sleep zawsze jest całkiem inny winksmiley.jpg

w powyższych postach też opisałem jak otworzyć inny proces oderwany od tego który go wywołuje winksmiley.jpg [a wszystko po to by nadmiernie nie konsumowało czasu wykonania skryptu]

ale jak się okazuje jest to przepis na linuxa winksmiley.jpg
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.