urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
sup
Сообщения: 10
Зарегистрирован: Чт апр 30, 2009 04:59

Сообщение sup »

Точно чтож я тупил та, даже в голову не пришел такой момент.
Вообщем после не долгих раздумий добавляем в скрипты где передаются параметров более 521 ($x<521):

Код: Выделить всё

if&#40;$count_pk>$x&#41;&#123;
$this->connection->urfa_send_param&#40;$packet&#41;;
$packet = $this->connection->getPacket&#40;&#41;;
$count_pk=0;
&#125;
Ну и так далее...

Аватара пользователя
ds
Сообщения: 380
Зарегистрирован: Пн сен 18, 2006 14:06

Сообщение ds »

sup писал(а):Точно чтож я тупил та, даже в голову не пришел такой момент. .
Ну я только предположил. Можно проверить, так или нет - создаем например 500 направлений (важно, чтобы до момента вылета), а потом вызываем заведомо рабочую функцию, самую простую. Если она отрабатывает как надо, думаю можно писать багрепорт.
Интересно, часто надо столько направлений загружать?

sup
Сообщения: 10
Зарегистрирован: Чт апр 30, 2009 04:59

Сообщение sup »

Да я уже проверил все ок, повидимому за 1 раз урфа больше 521 параметра не принимает, отправляим допустим 300 порцию потом еще 300...ну и т.д. она буит ждать пока все не приедет что нужно.

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Наконец то дошли руки перевести свое хозяйство на новую urfa_get_data().
Основная масса функций отлично заработала, но есть и затыки:
вызываю функцию

Код: Выделить всё

$start_date = strtotime&#40;"01.07.2009"&#41;;
$end_date =   strtotime&#40;"01.08.2009"&#41;;
$report = $urfa_user5->rpcf_user5_traffic_report&#40;$start_date, $end_date&#41;;  //-0x4012 
print_r&#40;$report&#41;;
после долгого ожидания получаю ошибку

Код: Выделить всё

Fatal error&#58;  Uncaught exception 'Exception' with message 'Error code 35' in /var/www/html/stat/urfa/URFAClient_Packet.php&#58;27
Stack trace&#58;
#0 /var/www/html/stat/urfa/URFAClient_Connection.php&#40;125&#41;&#58; URFAClient_Packet->read&#40;&#41;
#1 /var/www/html/stat/urfa/URFAClient_User5.php&#40;86&#41;&#58; URFAClient_Connection->urfa_get_data&#40;&#41;
#2 /var/www/html/stat/urfa/index.php&#40;52&#41;&#58; URFAClient_User5->rpcf_user5_traffic_report&#40;1247947200, 1249329600&#41;
#3 &#123;main&#125;
  thrown in /var/www/html/stat/urfa/URFAClient_Packet.php on line 27
код самой функции идентичен http://wiki.flintnet.ru/doku.php?id=fun ... id_-0x4009

urfa_get_data() :

Код: Выделить всё

	function urfa_get_data&#40;&#41; &#123; 
	    $packet = $this->getPacket&#40;&#41;; 
	    $packet->clean&#40;&#41;; 
	    while&#40;true&#41; &#123; 
	       if &#40;!feof&#40;$this->socket&#41;&#41; &#123; 
	             $packet->read&#40;&#41;; 
	             if &#40;$packet->AttrGetInt&#40;4&#41;&#41; 
	                 break; 
	       &#125; 
	    &#125; 
	    if &#40;count&#40;$packet->data&#41;==0&#41; 
	          return FALSE; 
	    return $packet; 
	&#125; 
ошибку выдает здесь:

Код: Выделить всё

    function read&#40;&#41;
    &#123;
        $this->code = ord&#40;fread&#40;$this->sock, 1&#41;&#41;;
        if &#40;$this->version != ord&#40;fread&#40;$this->sock, 1&#41;&#41;&#41; &#123;
&#91;b&#93;    	    throw new Exception&#40;"Error code " . ord&#40;fread&#40;$this->sock, 1&#41;&#41;&#41;;&#91;/b&#93;
        &#125; else &#123;
    	    list&#40;, $this->len&#41; = unpack&#40;"n", fread&#40;$this->sock, 2&#41;&#41;;
    	    $this->parse_packet_data&#40;&#41;;
    	&#125;
    &#125;
В логах билинга все нормально:

Код: Выделить всё

 Info  &#58; Aug 04 21&#58;20&#58;45 RPCConn&#58; Card user <kayfolom@127.0.0.1> is connecting
 Info  &#58; Aug 04 21&#58;20&#58;45 RPCConn<kayfolom@127.0.0.1>&#58; Access granted to <kayfolom@127.0.0.1> &#40;UID&#58; 1&#41;
?Debug &#58; Aug 04 21&#58;20&#58;45 RPCConn<kayfolom@127.0.0.1>&#58; Call&#58; 0xffffbff7 &#40;__rpcs_user5_traffic_report&#41;
?Debug &#58; Aug 04 21&#58;20&#58;45 RPCConn<kayfolom@127.0.0.1>&#58; Real Call&#58; 0xffffbff7 &#40;__rpcs_user5_traffic_report&#41;
?Debug &#58; Aug 04 21&#58;21&#58;57 RPCConn<kayfolom@127.0.0.1>&#58; Call 0xffffbff7 &#40;__rpcs_user5_traffic_report&#41; finished...
?Debug &#58; Aug 04 21&#58;21&#58;57 RPCConn<kayfolom@127.0.0.1>&#58; Stream cleared
 Warn  &#58; Aug 04 21&#58;21&#58;57 RPCConn<kayfolom@127.0.0.1>&#58; Session closed
?Debug &#58; Aug 04 21&#58;21&#58;57 RPCConn<kayfolom@127.0.0.1>&#58; Session stored for UID 1 from <127.0.0.1>
?Debug &#58; Aug 04 21&#58;21&#58;57 RPCConn<kayfolom@127.0.0.1>&#58; Session closed...
Причем php продолжает висеть еще минуту после появления в логах Call 0xffffbff7 (__rpcs_user5_traffic_report) finished...

Что может быть?

swibl
Сообщения: 17
Зарегистрирован: Вт июн 30, 2009 08:21

Сообщение swibl »

Код: Выделить всё

Fatal error&#58;  Uncaught exception 'Exception' with message 'Error code 35' in /var/www/html/stat/urfa/URFAClient_Packet.php&#58;27 
Я эту строку тупо закомментировал :) Не помню уже почему, но все работает :)
В том числе rpcf_user5_traffic_report

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Не помогло. Отчет по трафику дорабатывает до конца, но возвращает пустой массив. Обнаружил что и с отчетами по услугам таже беда (отчет по услугам с закомментированной строчкой выдает "Fatal error: Call to a member function DataGetInt() on a non-object in /var/www/html/stat/urfa/URFAClient_User5.php on line 328").
И самое странное - все подобные отчеты корректно работают (и без удаления строчки вызова эксепшина) при малых временных периодах запросов. Т.е. за 3-4 дня отлично работает, если больше - то фиг.
Такое ощущение что по каким-то таймаутам все отваливается.
У кого может появятся мысли в какую сторону копать?

ЗЫ. Откатил все на старую версию urfa_get_data - и все тоже самое. Не работают отчеты более чем за 3-4 дня. В админке все прекрасно работает. Не могу понять в чем дело.

Аватара пользователя
ds
Сообщения: 380
Зарегистрирован: Пн сен 18, 2006 14:06

Сообщение ds »

Kayfolom писал(а):Не помогло. Отчет по трафику дорабатывает до конца, но возвращает пустой массив. Обнаружил что и с отчетами по услугам таже беда (отчет по услугам с закомментированной строчкой выдает "Fatal error: Call to a member function DataGetInt() on a non-object in /var/www/html/stat/urfa/URFAClient_User5.php on line 328").
И самое странное - все подобные отчеты корректно работают (и без удаления строчки вызова эксепшина) при малых временных периодах запросов. Т.е. за 3-4 дня отлично работает, если больше - то фиг.
Такое ощущение что по каким-то таймаутам все отваливается.
У кого может появятся мысли в какую сторону копать?

ЗЫ. Откатил все на старую версию urfa_get_data - и все тоже самое. Не работают отчеты более чем за 3-4 дня. В админке все прекрасно работает. Не могу понять в чем дело.
max_execution_time в php.ini? Для длительных отчетов минут от 5-ти, может 10-ти, не меньше надо ставить. Обычно затык именно здесь.

Комментировать обработку ошибок не советую, они как раз говорят о проблеме. Уж лучше ошибка вылезет, чем непонятно что :)

Аватара пользователя
ds
Сообщения: 380
Зарегистрирован: Пн сен 18, 2006 14:06

Сообщение ds »

Как раз об этом и говорит

Код: Выделить всё

Fatal error&#58; Call to a member function DataGetInt&#40;&#41;
что не надо комментировать. Ждем одно, получаем другое. НЕ СЛУШАЙТЕ таких советов, проблему искать надо в другом месте!

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Все страннее и страннее. Решил отдебажить кусок кода, сделал следующее:

Код: Выделить всё

    function read&#40;&#41;
    &#123;
        $this->code = ord&#40;fread&#40;$this->sock, 1&#41;&#41;;
        if &#40;$this->version != ord&#40;fread&#40;$this->sock, 1&#41;&#41;&#41; &#123;
	        print '$this->version='.$this->version."<BR>";
	        print 'ord&#40;fread&#40;$this->sock, 1&#41;&#41;='.ord&#40;fread&#40;$this->sock, 1&#41;&#41;."<BR>";
    	    throw new Exception&#40;"Error code " . ord&#40;fread&#40;$this->sock, 1&#41;&#41;&#41;; // Kayfolom - test
        &#125; else &#123;
    	    list&#40;, $this->len&#41; = unpack&#40;"n", fread&#40;$this->sock, 2&#41;&#41;;
    	    $this->parse_packet_data&#40;&#41;;
    	&#125;
    &#125;
Получаю на выходе:
$this->version=35
ord(fread($this->sock, 1))=35
Т.е. значения равны и следовательно этот кусок кода с ексепшином вообще не должен выполняться. Или я не прав?

Сорри, прогнал... Я же этим fread прочитал следующий байт...

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Сделал по другому:
$a1 = $this->version;
$b1 = ord(fread($this->sock, 1));
if ($a1 != $b1) {
print '$this->version='.$a1."<BR>";
print 'ord(fread($this->sock, 1))='.$b1."<BR>";
throw new Exception("Error code " . ord(fread($this->sock, 1)));

Получил в ответ:
$this->version=35
ord(fread($this->sock, 1))=200

Теперь бы еще понять почему получаю 200 вместо 35? ;)

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Да, забыл упомянуть - в php увеличил таймауты:
default_socket_timeout = 600
max_execution_time = 600
max_input_time = 600
Тоже не помогло.

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Блин, решил проблему. Долго смеялся ;)
До этого все делал через браузер.
Как только осенила идея убрать апач из списка возможных проблем (хотя это надо было сделать в первую очередь) все заработало.
Т.е. из консоли php index.php работает превосходно.

Может кто знает что в апаче подкрутить? Я не особо с ним знаком, всегда пользовался по принципу поставил-работает-забыл... ;)

Решил проблему. Закоментил лишнее в php.conf
#<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
#</IfModule>
#<IfModule worker.c>
# LoadModule php5_module modules/libphp5-zts.so
#</IfModule>
И все заработало. Блин. Два дня потерял из за такой мелочи :(

starchik
Сообщения: 461
Зарегистрирован: Сб ноя 22, 2008 22:07

Сообщение starchik »

<function name="rpcf_payments_report_owner" id="0x3008"> эту функцию еще никто не реализовал?

в вики она есть, только при вызове пишет

Код: Выделить всё

Error calling function rpcf_payments_report_owner
и в логах.....

Код: Выделить всё

?Debug &#58; Aug 08 03&#58;47&#58;20 RPCConn<web@192.168.8.203>&#58; Session closed...
 Info  &#58; Aug 08 03&#58;47&#58;20 RPCConn<starchik@192.168.8.203>&#58; Request for illegal function&#58; 0x3008
 Warn  &#58; Aug 08 03&#58;47&#58;20 RPCConn<starchik@192.168.8.203>&#58; Session closed
?Debug &#58; Aug 08 03&#58;47&#58;20 RPCConn<starchik@192.168.8.203>&#58; Session stored for UID 1 from <192.168.8.203>
?Debug &#58; Aug 08 03&#58;47&#58;20 RPCConn<starchik@192.168.8.203>&#58; Session closed...
 Warn  &#58; Aug 08 03&#58;47&#58;20 RPCConn<starchik@192.168.8.203>&#58; Session closed
где грабли?

starchik
Сообщения: 461
Зарегистрирован: Сб ноя 22, 2008 22:07

Сообщение starchik »

все, разобрался......сам дурак. хотел из под обычного пользователя эту функцию юзать :lol:

i_destr
Сообщения: 12
Зарегистрирован: Ср сен 26, 2007 13:16

Сообщение i_destr »

Вопрос знатокам.
Необходимо через urfaphp изменить пользователю MAC адрес для его IP
Для этого IP в админке стоит галочка "Не ВПН". Произвожу изменения следующим образом:
1) удаляю текущий айпишник (функция 0x5102)
$urfa_admin->rpcf_delete_from_ipgroup($slink_id,$ip,$mask="255.255.255.255");
2) создаю этот же айпишник но с новым мак-адресом (функция 0x5200)
$urfa_admin->rpcf_add_to_ipgroup($ip_group_id,$ip,"255.255.255.255","","",$new_mac);
Возникает такая проблема - убирается галочка "Не ВПН".
Как сделать, чтобы галочка оставалась?

Ответить