PHP code example of evilfreelancer / routeros-api-php
1. Go to this page and download the library: Download evilfreelancer/routeros-api-php library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
evilfreelancer / routeros-api-php example snippets
use \RouterOS\Client;
use \RouterOS\Query;
// Initiate client with config object
$client = new Client([
'host' => '192.168.1.3',
'user' => 'admin',
'pass' => 'admin',
'port' => 8728,
]);
// Create "where" Query object for RouterOS
$query =
(new Query('/ip/hotspot/ip-binding/print'))
->where('mac-address', '00:00:00:00:40:29');
// Send query and read response from RouterOS
$response = $client->query($query)->read();
var_dump($response);
use \RouterOS\Client;
use \RouterOS\Query;
// Initiate client with config object
$client = new Client([
'host' => '192.168.1.3',
'user' => 'admin',
'pass' => 'admin'
]);
// Send "equal" query with details about IP address which should be created
$query =
(new Query('/ip/hotspot/ip-binding/add'))
->equal('mac-address', '00:00:00:00:40:29')
->equal('type', 'bypassed')
->equal('comment', 'testcomment');
// Send query and read response from RouterOS (ordinary answer from update/create/delete queries has empty body)
$response = $client->query($query)->read();
var_dump($response);
use \RouterOS\Client;
// Initiate client with config object
$client = new Client([
'host' => '192.168.1.3',
'user' => 'admin',
'pass' => 'admin',
'ssh_port' => 22222,
'ssh_timeout' => 60, // if not set then 30 seconds by default
]);
// Execute export command via ssh
$response = $client->query('/export');
// or
$response = $client->export();
var_dump($response);
use \RouterOS\Query;
/**
* Simple "where" query will be generated by default
*/
$client->query('/ip/address/print')->read();
/**
* Send advanced "where" query with parameters to RouterOS
*/
// If only one "where" condition
$client->query('/queue/simple/print', ['target', '192.168.1.1/32']);
// If multiple "where" conditions and need merge (operation "|") results
$client->query('/interface/print', [
['type', 'ether'], // same as ['type', '=', 'ether']
['type', 'vlan'], // same as ['type', '=', 'vlan']
], '|');
/**
* Or in OOP style
*/
// If you need create query for "create/update/delete" operations
$query = new Query('/ip/hotspot/ip-binding/add');
$query->equal('mac-address', '00:00:00:00:40:29');
$query->equal('type', 'bypassed');
$query->equal('comment', 'testcomment');
// If multiple "where" conditions and need merge (operation "|") results
$query = new Query('/interface/print');
$query->where('type', 'ether');
$query->where('type', 'vlan');
$query->operations('|');
// If multiple "where" conditions and need append tag
$query = new Query('/interface/set');
$query->where('disabled', 'no');
$query->where('.id', 'ether1');
$query->tag(4);
/**
* Write Query object to RouterOS and read response from it
*/
$response = $client->query($query)->read();
use \RouterOS\Client;
$client = new Client([
'host' => '192.168.1.3',
'user' => 'admin',
'pass' => 'admin'
]);
use \RouterOS\Config;
use \RouterOS\Client;
/**
* You can create object of Config class
*/
$config = new Config();
// Then set parameters of config
$config->set('host', '192.168.1.3');
$config->set('user', 'admin');
$config->set('pass', 'admin');
// By the way, `->set()` method is support inline style of syntax
$config
->set('host', '192.168.1.3')
->set('user', 'admin')
->set('pass', 'admin');
/**
* Or just create preconfigured Config object
*/
$config = new Config([
'host' => '192.168.1.3',
'user' => 'admin',
'pass' => 'admin'
]);
/**
* Then send Config object to Client constructor
*/
$client = new Client($config);
\RouterOS\Client;
// Initiate client with config object
$client = new Client([
'host' => '192.168.1.3',
'user' => 'admin',
'pass' => 'admin',
'legacy' => true // you need set `legacy` parameter with `true` value
]);
// Your code below...
use \RouterOS\Query;
// Get all installed packages (it may be enabled or disabled)
$query = new Query('/system/package/getall');
// Send "equal" query with details about IP address which should be created
$query =
(new Query('/ip/hotspot/ip-binding/add'))
->equal('mac-address', '00:00:00:00:40:29')
->equal('type', 'bypassed')
->equal('comment', 'testcomment');
// Set where interface is disabled and ID is ether1 (with tag 4)
$query =
(new Query('/interface/set'))
->where('disabled', 'no')
->where('.id', 'ether1')
->tag(4);
// Get all ethernet and VLAN interfaces
$query =
(new Query('/interface/print'))
->where('type', 'ether')
->where('type', 'vlan')
->operations('|');
// Get all routes that have non-empty comment
$query =
(new Query('/ip/route/print'))
->where('comment', '>', null);
use \RouterOS\Query;
use \RouterOS\Client;
// Initiate connection to RouterOS
$client = new Client([
'host' => '192.168.1.3',
'user' => 'admin',
'pass' => 'admin'
]);
/**
* Execute query directly through "->query()" method of Client class
*/
// If your query has no "where" conditions
$client->query('/ip/arp/print');
// If you have only one where condition, you may use one dimensional array as second parameter of query method
$client->query('/queue/simple/print', ['target', '192.168.1.250/32']);
// If you need set few where conditions then need use multi dimensional array
$client->query('/interface/bridge/add', [
['name', 'vlan100-bridge'],
['vlan-filtering', 'no']
]);
/**
* By some reason you may need restrict scope of RouterOS response,
* for this need to use third attribute of "->query()" method
*/
// Get all ethernet and VLAN interfaces
$client->query('/interface/print', [
['type', 'ether'],
['type', 'vlan']
], '|');
/**
* If you want set tag of your query then you need to use fourth
* attribute of "->query()" method, but third attribute may be null
*/
// Enable interface (tag is 4)
$client->query('/interface/set', [
['disabled', 'no'],
['.id', 'ether1']
], null, 4);
/**
* Or in OOP style
*/
// Get all ethernet and VLAN interfaces
$query = new Query('/interface/print');
$query->where('type', 'ether');
$query->where('type', 'vlan');
$query->operations('|');
// Enable interface (tag is 4)
$query = new Query('/interface/set');
$query->equal('disabled', 'no');
$query->equal('.id', 'ether1');
$query->tag(4);
// Or, RAW mode
$query = new Query('/interface/set');
$query->add('=disabled=no');
$query->add('=.id=ether1');
$query->add('.tag=4');
// Or, RAW mode in format of array
$query = new Query('/interface/set', [
'=disabled=no',
'=.id=ether1',
'.tag=4'
]);
// Or
$query = new Query([
'/interface/set',
'=disabled=no',
'=.id=ether1',
'.tag=4'
]);
/**
* Write Query object to RouterOS and read response from it
*/
$response = $client->query($query)->read();
$response = $client->query($query)->readAsIterator();
var_dump($response);
// The following for loop allows you to skip elements for which
// $iterator->current() throws an exception, rather than breaking
// the loop.
for ($response->rewind(); $response->valid(); $response->next()) {
try {
$value = $response->current();
} catch (Exception $exception) {
continue;
}
# ...
}
/**
* Execute query and read response in ordinary mode
*/
$response = $client->query($query)->read();
var_dump($response);
// Or
$response = $client->q($query)->r();
var_dump($response);
// Single method analog of lines above is
$response = $client->qr($query);
var_dump($response);
/**
* Execute query and read response as Iterator
*/
$response = $client->query($query)->readAsIterator();
var_dump($response);
// Or
$response = $client->q($query)->ri();
var_dump($response);
// Single method analog of lines above is
$response = $client->qri($query);
var_dump($response);
/**
* By the way, you can send few queries to your router without result:
*/
$client->query($query1)->query($query2)->query($query3);
// Or
$client->q($query1)->q($query2)->q($query3);
// Create query which should remove security profile
$query = new \RouterOS\Query('/interface/wireless/security-profiles/remove');
// It will generate queries, which stared from "?" symbol:
$query->where('.id', '*1');
/*
// Sample with ->where() method
RouterOS\Query Object
(
[_attributes:RouterOS\Query:private] => Array
(
[0] => ?.id=*1
)
[_operations:RouterOS\Query:private] =>
[_tag:RouterOS\Query:private] =>
[_endpoint:RouterOS\Query:private] => /interface/wireless/security-profiles/remove
)
*/
// So, as you can see, instead of `->where()` need to use `->equal()`
// It will generate queries, which stared from "=" symbol:
$query->equal('.id', '*1');
/*
// Sample with ->equal() method
RouterOS\Query Object
(
[_attributes:RouterOS\Query:private] => Array
(
[0] => =.id=*1
)
[_operations:RouterOS\Query:private] =>
[_tag:RouterOS\Query:private] =>
[_endpoint:RouterOS\Query:private] => /interface/wireless/security-profiles/remove
)
*/