Princip je jednoduchy vytvorime skripty naplnime prikazmy, spustime a vymazeme. testovane na 1.8 Ghz celerom
Pravidla musia byt v poli $zapis vo formate:
Array
(
[0] => /ip firewall address-list remove [/ip firewal address-list find list=test_api]
[1] => /ip firewall address-list add address=192.168.1.1 comment="1" disabled=no list=test_api
[2] => /ip firewall address-list add address=192.168.1.2 comment="2" disabled=no list=test_api
[3] => /ip firewall address-list add address=192.168.1.3 comment="3" disabled=no list=test_api
)
require('routeros_api.class.php');
$API = new routeros_api();
//$API->debug = true;
if($API->connect('192.168.1.1', 'uzivatel', 'heslo')){
$leghtscript = 60000; # max dzka skriptu (pocet znakov), doporucena maximalna hodnota 60000
$delay = 2; # scheduler, oneskorenie spustania skritov voci zistenemu casu z mikrotiku (s), doporucena minimalna hodnota 2
$x=1;
# rozdeluje data pre skripty
foreach($zapis as $prikaz){
if(strlen($DataPreScripty[$x]) > $leghtscript){
$DataPreScripty[$x] .= "/system script run API-PHP-".($x+1)."; ";
$DataPreScripty[$x] .= "/system script remove API-PHP-$x; ";
$x++;
}
$DataPreScripty[$x] .= $prikaz."; ";
}
# zapis do posledneho datoveho skriptu
$DataPreScripty[$x] .= "/system script run API-PHP-done; ";
$DataPreScripty[$x] .= "/system script remove API-PHP-$x; ";
# vytvara skripty a plni datami
for($e = 1; $e <= $x; $e++){
$API->comm("/system/script/add", array( "name" => "API-PHP-".$e, "source" => $DataPreScripty[$e]));
}
# vytvara data pre posledny skript
$last_script .= "/system scheduler remove API-PHP; ";
$last_script .= "/log info (\"done API-PHP, time: \" . [/system clock get time]); ";
$last_script .= "/system script remove API-PHP-done; ";
# vytvara posledny skript pre vymazanie schedulera
$API->comm("/system/script/add", array( "name" => "API-PHP-done", "source" => $last_script));
# zistuje cas v mikrotiku
$T = $API->comm("/system/clock/print");
# vytvara schedule
$MKTimestap = MKTimeToTimestamp($T[0][date], $T[0][time]) + $delay;
$datum = date("M/d/Y", $MKTimestap);
$cas = date("H:i:s", $MKTimestap);
$API->comm("/system/scheduler/add", array("name"=>"API-PHP", "start-date"=>$datum, "start-time"=>$cas, "on-event"=>"API-PHP-1",));
$API->disconnect();
}
function MKTimeToTimestamp($d, $c){
$Date = explode("/", $d);
$Time = explode(":", $c);
$den = ltrim($Date[1], "0");
switch (trim($Date[0])){
case "jan": $mes = 1; break;
case "feb": $mes = 2; break;
case "mar": $mes = 3; break;
case "apr": $mes = 4; break;
case "may": $mes = 5; break;
case "jun": $mes = 6; break;
case "jul": $mes = 7; break;
case "aug": $mes = 8; break;
case "sep": $mes = 9; break;
case "oct": $mes = 10; break;
case "nov": $mes = 11; break;
case "dec": $mes = 12; break;
default: $mes = 1;
}
return mktime($Time[0], $Time[1], $Time[2], $mes, $den, $Date[2]);
}