Pradinis
Pagalba
Užsisakyk!
- Reklamą
- Hostingą
- El. pašto dėžutę
Užsisakyk!
Įrankiai
Pasidalink
- Visos temos
Dažnai reikia kažkokias operacijas automatizuoti, ir nebūtinai tai reikia daryti 'user-online' pagrindu. T.y., nemažai programuotojų realizuoja šį dalyką, kaskart kraunant saitą, tikrinti laiką, ir jeigu tai spec. laikas ir dar nebuvo įvykdytas cronjob'as, tuomet įvykdo php skriptą. Tačiau yra ir kitas sprendimas - tikrieji cronjob'ai. Tikrieji cronjob'ai uždedami per SSH VPS serveriams, arba per Direct Admin, jeigu turite Cronjob galimybę. 1 aspektas - Php lokacija: CentOS4,5 serveryje ji tikėtina kad bus: /usr/local/bin/php Kituose serveriuose ji gali būti ir tokia: /usr/local/bin/php Tikslų kelią galite sužinoti įsikėlę į savo serverį phpinfo.php failą, arba per pridėtinius puslapius įvykdę: <?php echo phpinfo() ?> Bei pažiūrėję prie eilutės: open_basedir : <kažkas>:<kažkas>:/usr/local/lib/php/ Tai ir bus pilnas kelias serveryje iki Php direktorijos. 2 aspektas - kelias iki Jūsų failo (PATH/TO/FILE): Tai turi būti pilnas kelias, pateikame 3 aspektas - įvykdomo failo CHMOD: Turite būti tikri kad failas turės EXECUTE priegą, t.y. CHMOD 755 ar panašus. Taigi, prisijungę prie DA, ir atsidarę savo domenui CRONJOBS, matote tokius laukelius: Minute [_____] 0-59 Hour [_____] 0-23 Day of Month [_____] 1-31 Month [_____] 1-12 Day of Week [_____] 0-7 (0 or 7 = Sunday) Command [___________________] Į auksčiau esančius laukelius galite įvesti: "*", t.y. operacija bus vykdoma kiekvieną ciklą. skaičių, t.y. operaciją bus vykdomą tik esant tam tikram laiko vienetą, parašyta Na o pati komanda atrodytų taip: /usr/local/bin/php -q /home/DA_LOGIN/domains/DOMENAS.LT/public_html/cronjob.first.php Paveikslėlis: Jeigu dar patys ir redaguojate CronTab'ą, t.y. /etc/crontab serverio failą, tai komanda būtų tokia: /usr/local/bin/php -q /home/DA_LOGIN/domains/DOMENAS.LT/public_html/cronjob.first.php (skriptas bus vykdomas kasdien 5:55 val ryto). Alternatyva, jeigu Jūsų php buvo instaliuotas naudojant "Apache" modulį, būtų naudoti "Lynx browser" naršyklė. Tai minimali, tekstinė naršyklė UNIX/Linux sistemose. Tokiu atveju Cronjob'as per DA atrodytų taip:
Jeigu dar patys ir redaguojate CronTab'ą, t.y. /etc/crontab serverio failą:
(skriptas bus vykdomas kasdien 5:55 val ryto).---------- Kita alternatyva, yra kviesti visą tai per php failą pasinaudojus atsitiktiniu lankytoju, kuris tą skriptą, to nežinodamas, paleis. Šią galimybę realizuoja ir Php-Fusion nuo v7.01 versijos (vartotojų automatizuotas banų nuėmimas ir pan.) <?php /* @description - Simple class for managing cronjobs, possible further extensions * @author - ozzWANTED * @date - 2010-10 * @version - 1.0 */ class CronManager { // Simple cron by ozzWANTED @ 2010-10 public static function do_cronjob($path_to_file, $minute="*", $hour="*",$day="*", $month="*", $day_of_week="*") { $pass = true; // Mins if(is_array($minute) && !in_array(date("i"),$minute))) $pass = false; else if($minute != date("i") && $minute != "*") $pass = false; // Mins with leading zero, ex. 00-59 // Hours if(is_array($hour) && !in_array(date("H"),$hour))) $pass = false; else if($hour != date("H") && $hour != "*") $pass = false; // Hours with leading zero, ex. 00-23 // Days if(is_array($day) && !in_array(date("d"),$day))) $pass = false; else if($day != date("d") && $day != "*") $pass = false; // Days with leading zero, ex. 01-31 // Months if(is_array($month) && !in_array(date("m"),$month))) $pass = false; else if($month != date("m") && $month != "*") $pass = false; // Months with leading zero, ex. 01-12 // Weekday's if(is_array($day_of_week) && !in_array(date("N"),$day_of_week))) $pass = false; else if($day_of_week != date("N") && $day_of_week != "*") $pass = false; // Days of Week, Php 5.1.0+, ex. 1-7 // if passed, do cronjob if($pass) { include($path_to_file); return true; } else { return false; } } } $crons = array( 0 => array("cron1.php", "55","05","*", "*", array("1", "3", "5")) ); // FOR DUMB's and NOOBS - do cronjob CronManager::do_cronjob($crons[0]); // FOR ADVANCED users $cron = 0; $period = 24*60*60; if(dbrows(dbquery("SELECT last_cron FROM ".DB_CRONJOB." WHERE cron_id='$cron' AND last_cron<(UNIX_TIMESTAMP()-$period)"))) { CronManager::do_cronjob($crons[0]); dbquery("UPDATE ".DB_CRONJOB." SET last_cron=UNIX_TIMESTAMP() WHERE cron_id='$cron'"); } ?> Kodas taip pat įkeltas ir čia: https://webdnd.com/php-cronjobai,k574 2010 (C) ozzWANTED @ PhpFusion-LT.com | Straipsnio informacijaAutoriusozzWANTED Parašymo data 2010 spalio 31 18:10:13 Komentarų 7 Skaityta 5585 Straipsnio sudėtingumas (Pažengusiems) Spausdinti |
|