прочитав тему, высмотрел что на x64 могут быть проблемы?
Внеся изменения как тут -
viewtopic.php?p=57838&highlight=unpack#57838
теперь ругается по другому:
Код: Выделить всё
Notice: Undefined offset: 1 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 114
Warning: unpack(): Type N: not enough input, need 4, have 0 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 182
Notice: Undefined offset: 2 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 114
Warning: unpack(): Type N: not enough input, need 4, have 0 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 182
Notice: Undefined offset: 3 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 114
Warning: unpack(): Type N: not enough input, need 4, have 0 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 182
Notice: Undefined offset: 4 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 148
Notice: Undefined offset: 5 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 148
Notice: Undefined offset: 6 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 148
Notice: Undefined offset: 7 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 141
Warning: unpack(): Type d: not enough input, need 8, have 0 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 190
Notice: Undefined offset: 8 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 141
Warning: unpack(): Type d: not enough input, need 8, have 0 in /var/www/html/tech/admin/urfaphp/URFAClient_Packet.php on line 190
Array
(
[count] => 1
[services] => Array
(
[0] => Array
(
[id] =>
[service_id] =>
[service_type] =>
[service_name] =>
[tariff_name] =>
[discount_period] =>
[cost] => 0
[discounted_in_curr_period] => 0
)
)
)
похоже это проблема в функции rpcf_user5_get_services (кол-во сервисов выводит правильное, но данных никаких)
попробовал другую(rpcf_user5_get_user_info), нормально отработала
П.С. В итоге не работают некоторые админские функции (rpcf_get_dhs_report) и некоторые пользовательские. Как исправить?
П.С.С. Перечитав первые страницы темы, вычитал и попробовав, получил такую рабочую функцию rpcf_get_dhs_report:
Код: Выделить всё
function rpcf_get_dhs_report($param)
{ // 0x5015
$ret=array();
if (!$this->connection->urfa_call(0x5015))
{
print "Error calling function ". __FUNCTION__ ."\n";
return FALSE;
}
$packet = $this->connection->getPacket();
$packet->DataSetInt( $param['user_id'] );
$packet->DataSetInt( $param['account_id'] );
$packet->DataSetInt( $param['apid'] );
$packet->DataSetInt( $param['t_start'] );
$packet->DataSetInt( $param['t_end'] );
$this->connection->urfa_send_param($packet);
if ( $x = $this->connection->urfa_get_data() )
{
$ret['dhs_log_size'] = $x->DataGetInt();
for ( $i = 0; $i < $ret['dhs_log_size']; $i++ )
{
$ari = array();
$x = $this->connection->urfa_get_data(); //была закоментирована в вики
$ari['id'] = $x->DataGetInt();
$ari['account_id'] = $x->DataGetInt();
$ari['slink_id'] = $x->DataGetInt();
$ari['recv_date'] = $x->DataGetInt();
$ari['last_update_date'] = $x->DataGetInt();
$ari['Called_Station_Id'] = $x->DataGetString();
$ari['Calling_Station_Id'] = $x->DataGetString();
$ari['framed_ip'] = $x->DataGetIPAddress();
$ari['nas_port'] = $x->DataGetInt();
$ari['acct_session_id'] = $x->DataGetString();
$ari['nas_port_type'] = $x->DataGetInt();
$ari['uname'] = $x->DataGetString();
$ari['service_type'] = $x->DataGetInt();
$ari['framed_protocol'] = $x->DataGetInt();
$ari['nas_ip'] = $x->DataGetIPAddress();
$ari['nas_id'] = $x->DataGetString();
$ari['acct_status_type'] = $x->DataGetInt();
$ari['acct_inp_pack'] = $x->DataGetLong();
$ari['acct_inp_oct'] = $x->DataGetLong();
$ari['acct_inp_giga'] = $x->DataGetLong();
$ari['acct_out_pack'] = $x->DataGetLong();
$ari['acct_out_oct'] = $x->DataGetLong();
$ari['acct_out_giga'] = $x->DataGetLong();
$ari['acct_sess_time'] = $x->DataGetLong();
$ari['acct_term_cause'] = $x->DataGetInt();
$ari['total_cost'] = $x->DataGetDouble();
$ret['dhs_log'][] = $ari;
}
}
return $ret;
}
с rpcf_user5_get_services так же проблема решилась, раскоментировав
$x = $this->connection->urfa_get_data();
в цикле
функция rpcf_service_report заработала в таком виде:
Код: Выделить всё
function rpcf_service_report($param) { //0x3021
$ret = array();
if (!$this->connection->urfa_call(0x3021)) { print "Error calling function ". __FUNCTION__ ."\n";return FALSE; }
$packet=$this->connection->getPacket();
$packet->DataSetInt( $param['user_id'] );
$packet->DataSetInt( $param['account_id'] );
$packet->DataSetInt( $param['group_id'] );
$packet->DataSetInt( $param['apid'] );
$packet->DataSetInt( $param['time_start'] );
$packet->DataSetInt( $param['time_end'] );
$this->connection->urfa_send_param($packet);
if( $x = $this->connection->urfa_get_data() ){
$ret['accounts_count'] = $x->DataGetInt();
for ( $i=0 ; $i < $ret['accounts_count'] ; $i++ ) {
$x = $this->connection->urfa_get_data();
$services['atr_size'] = $x->DataGetInt();
for( $j=0 ; $j < $services['atr_size'] ; $j++ ){
$x = $this->connection->urfa_get_data();
$services['atr_size_array'][$j]['account_id'] = $x->DataGetInt();
$services['atr_size_array'][$j]['login'] = $x->DataGetString();
$services['atr_size_array'][$j]['full_name'] = $x->DataGetString();
$services['atr_size_array'][$j]['discount_date'] = $x->DataGetInt();
$services['atr_size_array'][$j]['discount_period_id'] = $x->DataGetInt();
$services['atr_size_array'][$j]['discount'] = $x->DataGetDouble();
$services['atr_size_array'][$j]['service_name'] = $x->DataGetString();
$services['atr_size_array'][$j]['service_type'] = $x->DataGetInt();
}
$ret['services'][]=$services;
}
}
return $ret;
}