Jump to content
php.lv forumi

exec php iekš php


tmpjail

Recommended Posts

Kāpēc jātaisa ar php scheduleris?

Uz linux/unix sistēmām ir crontab.. uz Windows sistēmām at vai tas pats Task Scheduleris..

 

Ieliec tur ka palaižas ./php tavs.php (vai uz windozes php.exe fails.php (vai php-cli.exe fails.php)) un viss..

Link to comment
Share on other sites

tas nav īsti tas. uz attiecīgā hostinga nav pieejams nekādas papildu opcijas (crontab nav un nav arī iespēja tikt pie tā), ir tikai php/mysql un dažas ekstensijas. tāpēc domāju kā to izdarīt tikai ar php

Link to comment
Share on other sites

Nav vienkāršāk izvēlēties citu hostingu?

Vai arī izsauc savu skriptu attālināti caur http attiecīgajos intervālos..

 

Cik saprotu nav arī accesa shelam.. Šaubos tad arī vai ir eneiblota proc_open() funkcija ar kuru tad varētu teorētiski izsaukt background php procesu kas tad varētu permenanti griezties (lai gan tas nekas īpaši labs nav, proti php nav tam domāts)..

 

 

Vēl viens variants ir taisīt ko līdzīgu principam kā darbojas php garbage colectors.

 

Proti:

1) piemēram datubāzē vai txt failā ieliec ierakstu ar laiku un/vai pazīmi kad procesam jaizpildās.

2) standarta lapā ieliec kodu kas pie requesta checko ierakstu - vai ir pienācis konkrētais laiks / vai process ir izpildīts

3) ja ir pienācis pareizais laiks un process nav vēl izpildīts palaid konkrēto schedulera kodu..

 

Mīnusi šādam principam:

1) papildus pārbaude/slodze parastā kodā

2) ja tavu lapu (php) lietotāji nevirina pietiekami bieži tad var gadīties ka schedulings nenotiek vispār vai notiek nenoteiktā laikā pēc paredzētā..

Link to comment
Share on other sites

visvieglākais jau būtu, protams, nomainīt hostingu... :) bet pati būtība šai php shedulošanai ir visa automatizēšana, lai bez lietotāja starpniecības tiktu, piemēram, attīrīta draza, spams, tmp's un citi junki no mysql datubāzes.

par to attālināto izsaukšanu būtu jau okei, bet tad sanāk, ka vajadzīgs vēlviens hostings :) būtu labi, ja varētu to izdarīt lokāli uz servera

 

upd.:

 

problēmu itkā atrisināju (iekš datuve.lv), tikai ļoti iespējams šāds skripts noslogo serveri. lai nu kā, vēlamo panācu, jo fails test.txt izveidojās arī, ja biju no pārlūka izgājis uzreiz pēc skripta palaišanas.

 

<?php

set_time_limit(0);

ignore_user_abort(TRUE);

while(true)

{

sleep(600); // pēc cik ilga laika veiks darbību, piem. 10min

$file = fopen("test.txt","w");

echo fputs($file,"darbiiba peec vienas minuutes");

fclose($file);

}

?>

Edited by tmpjail
Link to comment
Share on other sites

tikai ļoti iespējams šāds skripts noslogo serveri

 

Tieši tā.. parefrešo kādas pāris reizes un būs jautri interesanti (faktiski standarta apaches konfigurācijā maksimums 250 reizes = MaxClients un serveris uz pieprasījumiem vairs tās 10min neatbildēs) ;)

 

Bet nu temporāri ganjauka palīdzēs..

Link to comment
Share on other sites

Pret norefrešošanu varētu cīnīties, izveidojot kaut kādu speciālu ierakstu datubāzē vai vienkārši failu uz diska, kur būtu pieglabāts pēdējais skripta palaišanas reizes laiks. Un tad no paša skripta katru reizi, kad kāds mēģina to pieprasīt, pārbaudīt vai gadijumā jau skripts nav izsaukts pēdējo 24h laikā. Ja ir, tad die.

Link to comment
Share on other sites

http://paste.php.lv/5519

 

Ne kaut kas nav, man tas skripts pastradaja 15min un automatiski pazuda no processiem? Vel aizmirsu piebilst tas ir uz windows.

Edited by cucumber
Link to comment
Share on other sites

Kapec tieshi 10x, ir bezgaliga cikla, ik pec $ref sekundem palaiz to, un ieraksta laiku, ja konfig faila ir dots parametrs iziet no cikla.

Bet es saku vairak par 15min tas nestrada?

Edited by cucumber
Link to comment
Share on other sites

Es vienkārši teicu ka pilnīgi (bez)nejēdzīgs tas kods.. bet nu labi..

 

Ganjauka vienkārši nokaras ar kādu eroru.. eneiblo php logu tad varēs noķert php.ini ieliec:

 

log_errors = On

error_log = /kaut/kads/fails.log

 

Un skaties kas tur parādas..

Link to comment
Share on other sites

visvieglākais jau būtu, protams, nomainīt hostingu... :) bet pati būtība šai php shedulošanai ir visa automatizēšana, lai bez lietotāja starpniecības tiktu, piemēram, attīrīta draza, spams, tmp's un citi junki no mysql datubāzes.

par to attālināto izsaukšanu būtu jau okei, bet tad sanāk, ka vajadzīgs vēlviens hostings :) būtu labi, ja varētu to izdarīt lokāli uz servera

Tādiem sīkiem sūdiem nafig kaut kādu šeduleri. No lapas include ar nosacījumiem un viss, lietotāju iespējamais retums nebūs problēma - jo liekos draņķus tak nav jēgas tīrīt, ja nav neviena, kas skatās ( un raksta ).
Link to comment
Share on other sites

×
×
  • Create New...