API PHP class

From MikroTik Wiki
Jump to: navigation, search
Icon-note.png

Note: This is just one of three PHP API clients. Check out also the API clients by Vasil Rangelov and Kamil Trzcinski


Info

This is PHP class for working with RouterOS API. You can take it, edit it and use it as you need.

Icon-warn.png

Warning: The class as shown does not work for large replies


Source

Icon-note.png

Note: Source has been removed from article and moved to the location specified below


Download, view, and contribute to the source at https://github.com/BenMenking/routeros-api

Author

Denis Basta (Denis [dot] Basta [at] gmail [dot] com)

Contributors

  • Nick Barnes
  • Ben Menking (ben [at] infotechsc [dot] com)
  • Jeremy Jefferson (http://jeremyj.com)
  • Cristian Deluxe (djcristiandeluxe [at] gmail [dot] com)
  • Mikhail Moskalev (mmv.rus [at] gmail [dot] com)

Changelog

1.0 Denis Basta (Denis [dot] Basta [at] gmail [dot] com) First PHP Class released from author

1.1 Nick Barnes
read() function altered to take into account the placing of the "!done" reply and also correct calculation of the reply length.

1.2 Ben Menking (ben [at] infotechsc [dot] com)
read() function altered removed echo statement that dumped byte data to screen

1.3 Jeremy Jefferson (http://jeremyj.com)
January 8, 2010
Fixed write function in order to allow for queries to be executed

1.4 Cristian Deluxe (djcristiandeluxe [at] gmail [dot] com)
November 17, 2011
comm() function altered, added the possibility of make regular exp queries.
parse_response() and parse_response4smarty() functions altered to support a "single data" responses from server
Added documentation to functions following PHPDoc guidelines
Added version number (1.4) for follow the changes more easy

1.5 Cristian Deluxe (djcristiandeluxe [at] gmail [dot] com)
October 6, 2013
[Fix] Uninitialized variable error in function "read"
The last edit by user "Eugenevdm" causes a syntax error (missing $ before variable name)
Thanks also to Daniel Machado for report this bug.
[Fix] Accidental assignment in a condition in function "connect"
[Fix] Uninitialized variable in function "connect"
[Fix] Remove unused variable from "parse_response" function
[Fix] Uninitialized variable in function "parse_response"
Updated version number to 1.5

1.6 Mikhail Moskalev (mmv.rus [at] gmail [dot] com)
Januar 4, 2015
[Fix] PHP Warning "Invalid argument supplied for foreach()..." which break output as adviced http://stackoverflow.com/questions/2630013/invalid-argument-supplied-for-foreach
Updated version number to 1.6

Examples

Example 1


<?php

require('routeros_api.class.php');

$API = new routeros_api();

$API->debug = true;

if ($API->connect('111.111.111.111', 'LOGIN', 'PASSWORD')) {

   $API->write('/interface/getall');

   $READ = $API->read(false);
   $ARRAY = $API->parse_response($READ);

   print_r($ARRAY);

   $API->disconnect();

}

?>

OR


<?php

require('routeros_api.class.php');

$API = new routeros_api();

$API->debug = true;

if ($API->connect('111.111.111.111', 'LOGIN', 'PASSWORD')) {

   $API->write('/interface/getall');
   $ARRAY = $API->read();

   print_r($ARRAY);

   $API->disconnect();

}

?>


OR


<?php

require('routeros_api.class.php');

$API = new routeros_api();

$API->debug = true;

if ($API->connect('111.111.111.111', 'LOGIN', 'PASSWORD')) {

   $ARRAY = $API->comm('/interface/getall');
   print_r($ARRAY);

   $API->disconnect();

}

?>


Output

Array
(
   [0] => Array
      (
         [.id] => *1
         [name] => ether1
         [mtu] => 1500
         [type] => ether
         [running] => yes
         [dynamic] => no
         [slave] => no
         [comment] => 
         [disabled] => no
      )

   [1] => Array
      (
         [.id] => *2
         [name] => ether2
         [mtu] => 1500
         [type] => ether
         [running] => yes
         [dynamic] => no
         [slave] => no
         [comment] => 
         [disabled] => no
      )

   [2] => Array
      (
         [.id] => *3
         [name] => ether3
         [mtu] => 1500
         [type] => ether
         [running] => yes
         [dynamic] => no
         [slave] => no
         [comment] => ether3
         [disabled] => no
      )
)

Example 2

Thanks a lot for this API, It help me a lot to write my php page for our support team to have access to wireless registration table.


 $API->write('/interface/wireless/registration-table/print',false);
 $API->write('=stats=');

Output

Array
(
[0] =>
   Array 
   ( 
   [.id] => *147 
   [comment] => 
   [interface] => AP101 
   [mac-address] => 00:0B:6B:37:58:33 
   [ap] => false 
   [wds] => false 
   [rx-rate] => 11Mbps 
   [tx-rate] => 11Mbps 
   [packets] => 4043966,2669114 
   [bytes] => 3961713942,280551024 
   [frames] => 4043966,2669114 
   [frame-bytes] => 3937477458,264536340 
   [hw-frames] => 4500839,2669114 
   [hw-frame-bytes] => 256326637,349947988 
   [tx-frames-timed-out] => 0 
   [uptime] => 1w13:09:12 
   [last-activity] => 00:00:00.090 
   [signal-strength] => -73dBm@11Mbps 
   [signal-to-noise] => 30 
   [strength-at-rates] => -73dBm@1Mbps 4m4s640ms,-73dBm@2Mbps 4m58s730ms,-73dBm@5.5Mbps 42s450ms,-73dBm@11Mbps 90ms 
   [tx-ccq] => 91 
   [p-throughput] => 5861 
   [ack-timeout] => 31 
   [last-ip] => 192.168.0.220 
   [802.1x-port-enabled] => true 
   [wmm-enabled] => false 
   ) 
[1] => Array
   (
        ...
    )
...
)

Example 3

Adding vpn user

$API->comm("/ppp/secret/add", array(
          "name"     => "user",
          "password" => "pass",
          "remote-address" => "172.16.1.10",
          "comment"  => "{new VPN user}",
          "service"  => "pptp",
));


Example 4

Find registration-table id for specified MAC

$ARRAY = $API->comm("/interface/wireless/registration-table/print", array(
  ".proplist"=> ".id",
  "?mac-address" => "00:0E:BB:DD:FF:FF",
));
print_r($ARRAY);

Example 5

Count leases from specific IP Pool (using regexp count all IPs starting with 1.1.x.x)

$ARRAY = $API->comm("/ip/dhcp-server/lease/print", array(
    "count-only"=> "",
    "~active-address" => "1.1.",
));
print_r($ARRAY);

or

$API->write('/ip/dhcp-server/lease/print', false);
$API->write('=count-only=', false);
$API->write('~active-address~"1.1."');
$ARRAY = $API->read();
print_r($ARRAY);

Returns a number with leases

See also