Autor Zpráva
SeparateSK
Profil
Dobrý deň robím jeden script,ktorý bude mať nejaký účel - byť aktívny non-stop,ale neviem ako ho mám zastaviť.
<?php
$p=0;
for(;;){
    $f=fopen("data.txt","w");
    fputs($f,$p);
    fclose($f);
    $p+=1;
    usleep(150000);
}
?>
Keď tento script spustím tak to súboru data.txt zapíše $p, ktoré sa zvyšuje.
Ale i keď som zatvoril prehliadač,script stále nejakú dobu ide, ako ho mám zastaviť - konkrétne do 197,bez toho aby som vypol server?
Mároš
Profil
<?php
$p=0;
for(;;){
    $f=fopen("data.txt","w");
    fputs($f,$p);
    fclose($f);
    $p+=1;
    usleep(150000);
if( $p == nejakeMaximalniCislo )
{
die(); //nebo exit();
}

}
?>
Majkl578
Profil
SeparateSK:
ale neviem ako ho mám zastaviť
Záleží, na základě čeho se má zastavit.
Ten cyklus v [#1] nedává smysl, proč do toho souboru pořád zapisuje a přepisuje jeho obsah? Proč jen nezapsat tu poslední hodnotu? A proč vůbec nekonečný cyklus?
for ($p = 0; $p < 500; $p++) { // 500 je ochranná bariéra, v tomhle případě 500 iterací
    file_put_contents('data.txt', $p);
    usleep(150000);
}
Joker
Profil
SeparateSK:
Ako zastaviť tento script?
Nedávat tam nekonečný cyklus.
SeparateSK
Profil
Mároš:
Keď použijem die(); ukončí sa script nadobro alebo ešte nejakú dobu pôjde, len nebude nič robiť z toho loopu?
Lebo ja túto funkciu až tak často(skoro nikdy) nepoužívam.
Bertram
Profil
SeparateSK:
ukončí sa script nadobro alebo ešte nejakú dobu pôjde
Buď ukončí skript, nebo pokud tomuto jazykovému konstruktu předáš nějaký string, tak ho vytiskne a ukončí skript.
Chro
Profil
SeparateSK:
Provozuji něco podobného a zastavení skriptu řeším i tím, že v cyklu při každé iteraci před funkcí sleep() načítám konfiguraci pomocí funkce parse_ini_file() z INI souboru:
run = on (nebo off)
Podmínka v skriptu pak podle hodnoty rozhodne o pokračování běhu nebo ukončení. Stačí změnit hodnotu v INI. Má to jednu velkou výhodu. Skript lze ukončit kdykoliv.
SeparateSK
Profil
Toto je asi najvhodnejšie riešenie ,teraz to vypadá nejak takto:
<?php
$p=0;
$run=true;
for(;;){
    $f=fopen("data.txt","w");
    fputs($f,$p);
    fclose($f);
    $p+=1;
    $r=parse_ini_file("status.ini",true);
    if($rData[run]=="off")$run=false;
    if(!$run){
        break;
     }
    usleep(150000);
}
exit(1);
?>
Chro:
Ďakujem za skvelý nápad.
Alphard
Profil
[#8] SeparateSK
To je docela běžné řešení, jen byste musel srozumitelně popsat, co chcete. Pak by někdo třeba ukázal rozumný script, který dělá to stejné.

Máte tam for(;;) a přitom pak manuálně inkrementujete $p a vyskočení z cyklu je zcela zbytečně v cyklu (a proč tam jsou dvě podmínky taky nevím). $r a $rData je asi jen překlep, ale konstanta run zřejmě neexistuje. Celkově je to dost bastl.
SeparateSK
Profil
pravda, $rData je preklep, má to byť $r

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: