Bavíme se o http://wiki.mikrotik.com/wiki/API.
První klasicky problém byly nějaké zmatené znaky v kódu, ale hlavně funkce read mi při zadání více příkazů a delšího seznamu položek typu "=" nedoběhla. Začalo to cyklit a nešlo se to dál.
Problém byl v podmínce, která "vyskakovala" z ciklu. Bohužel tam je podmínka, že česky: "pakliže je navázané spojení a není nic na výstupu". Můj PHP script je rychlejší a tak došlo k oznámení o ukončení spojení (ikdyž ještě neproběhlo) a tak tato podmínka nezafungovala a cyklus neskončil.
Originál:
function read($parse = true) {
$RESPONSE = array();
while (true) {
$LENGTH = ord(fread($this->socket, 1) );
if ($LENGTH > 0) {
$_ = fread($this->socket, $LENGTH);
$RESPONSE[] = $_;
}
$STATUS = socket_get_status($this->socket);
if ($LENGTH > 0)
$this->debug('>>> [' . $LENGTH . ', ' . $STATUS['unread_bytes'] . '] ' . $_);
if ( (!$this->connected && !$STATUS['unread_bytes']) || ($this->connected && $_ == '!done' && !$STATUS['unread_bytes']) )
break;
}
if ($parse)
$RESPONSE = $this->parse_response($RESPONSE);
return $RESPONSE;
}
Upraveno:
function read($parse = true) {
$RESPONSE = array();
while (true) {
$LENGTH = ord(fread($this->socket, 1) );
if ($LENGTH > 0) {
$_ = fread($this->socket, $LENGTH);
$RESPONSE[] = $_;
}
$STATUS = socket_get_status($this->socket);
if ($LENGTH > 0)
$this->debug('>>> [' . $LENGTH . ', ' . $STATUS['unread_bytes'] . '] ' . $_);
if ( !$STATUS['unread_bytes'] || ($this->connected && $_ == '!done' && !$STATUS['unread_bytes']) )
break;
}
if ($parse)
$RESPONSE = $this->parse_response($RESPONSE);
return $RESPONSE;
}
Nevím, zda jsem to diagnostikoval správně, ale teď mi to maká