Заполучить вывод urfaclient

Технические вопросы по UTM 5.0
Ответить
ssb
Сообщения: 25
Зарегистрирован: Ср апр 13, 2011 11:12
Откуда: Киев
Контактная информация:

Заполучить вывод urfaclient

Сообщение ssb »

Господа, чует моё сердце, что ответ на мой вопрос где-то на поверхности, но сутки перечитывания мануалов, этого форума и гугла ничего не дали. Прошу помощи.
Задача, вроде бы, проста: выполнить из РНР-скрипта урфаклиент с какими-либо параметрами, получить и парсить его вывод. Вот на этапе "получить" загвоздка.
В голову сразу приходит элементарный shell_exec("/netup/utm5/bin/utm5_urfaclient -a blablabla"), он отрабатывает, действия производятся, но в качестве результата возвращается пустая строка. Все другие нагугленные варианты выполнения команд тоже возвращают пустую строку.
Если вспомнить о перенаправлении ввода-вывода и в консоли написать

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

/netup/utm5/bin/utm5_urfaclient -a blablabla > tmp.txt
то действие выполняется, создатся пустой tmp.txt, а вывод всё равно валится в консоль.
Что с этим делать, как отловить?

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

например

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


function get_xml($path_urfa,$action,$param)
{

  $handle = popen($path_urfa.' '.$action.'  -c /netup/utm5/utm5_urfaclient_web.cfg  '.$param, 'r');
  while(!feof($handle))
  {
    $read = fread($handle, 2096);
    $res.=$read;
  }
  pclose($handle);
  return $res;
}
но это изобреталось в тёмные времена, когда не было urfa-php

ssb
Сообщения: 25
Зарегистрирован: Ср апр 13, 2011 11:12
Откуда: Киев
Контактная информация:

Сообщение ssb »

popen пробовал, тоже был пустой результат... сейчас попробую полностью скопипастить этот кусок кода.
урфаклиент уже куплен, так что пробую плясать от него, а не от урфапхп

ssb
Сообщения: 25
Зарегистрирован: Ср апр 13, 2011 11:12
Откуда: Киев
Контактная информация:

Сообщение ssb »

скрипт:

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

<?php

error_reporting&#40;E_ALL&#41;;

function get_xml&#40;$path_urfa,$action,$param&#41; 
&#123; 
$res = '';
  $handle = popen&#40;$path_urfa.' -a '.$action. ' ' .$param, 'r'&#41;; 
  while&#40;!feof&#40;$handle&#41;&#41; 
  &#123; 
    $read = fread&#40;$handle, 2096&#41;; 
    $res.=$read; 
  &#125; 
  pclose&#40;$handle&#41;; 
  return $res; 
&#125; 



echo "<pre>";
echo get_xml&#40;"/netup/utm5/bin/utm5_urfaclient", "add_user", "-login testuser -password password"&#41;;
echo "</pre>";

?>
Результат вывода:

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

<pre></pre>
Пользователь при этом создался, как и положено.

А, вот заметил у вас кусок:

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

-c /netup/utm5/utm5_urfaclient_web.cfg
нет ли в этом конфиге каких-то параметров, отвечающих за то, куда направлять вывод? в оригинальном файле ничего подобного не нашел

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

то, что он куплен это хорошо... а popen не хорошо, если есть, так сказать, нативная альтернатива.

ssb
Сообщения: 25
Зарегистрирован: Ср апр 13, 2011 11:12
Откуда: Киев
Контактная информация:

Сообщение ssb »

урфапхп попробую обязательно. но сейчас именно зацепился с этой штуковиной. не важно, плохо popen или хорошо, если он всё равно не даёт нужного результата)

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

ну знач надо смотреть логи апача и дебаг

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

скрипт ваш рабочий, я проверил

ssb
Сообщения: 25
Зарегистрирован: Ср апр 13, 2011 11:12
Откуда: Киев
Контактная информация:

Сообщение ssb »

Что примечательно, если запустить таким образом урфаклиент без параметров, то юзедж нормально отображается.

ssb
Сообщения: 25
Зарегистрирован: Ср апр 13, 2011 11:12
Откуда: Киев
Контактная информация:

Сообщение ssb »

Буду ковырять логи, спасибо...

ssb
Сообщения: 25
Зарегистрирован: Ср апр 13, 2011 11:12
Откуда: Киев
Контактная информация:

Сообщение ssb »

В дебаге не вижу ничего ненормального (хотя, конечно, вопрос, как оно нормально)

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

Info  &#58; Apr 13 13&#58;04&#58;53 b3036b70 RPCServer@0.0.0.0&#58; Client connecting&#58; 127.0.0.1&#58;46723
 Info  &#58; Apr 13 13&#58;04&#58;53 b3036b70 RPCConn&#58; Connection from&#58; 127.0.0.1&#58;46723 new Session Key <4575a54d6407b68e1c07cc634ff6376a>
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 DBA&#58;Ctx&#58; Looking for urgent DB context
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 DBA Groups&#58; Group&#58; -1 from 1
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 DBA&#58;Ctx&#58; Pushing back urgent DB context
-Stats &#58; Apr 13 13&#58;04&#58;53 b3036b70 DBA Groups&#58;   Stats&#58; Uptime&#58; 00&#58;00&#58;00. Events&#58; 0; Errors&#58; 0
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 StreamManager&#58; connection <58> created
 Info  &#58; Apr 13 13&#58;04&#58;53 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Access granted to &#91;SSL&#93;<init@127.0.0.1> &#40;UID&#58; -1&#41;
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; SSL type requested&#58; SSLv3&#40;4&#41;
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Call&#58; 0x00a2 &#40;urfaclient-call&#41;
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Real Call&#58; 0x00a2 &#40;urfaclient-call&#41;
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Call 0x00a2 &#40;urfaclient-call&#41; finished...
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Stream cleared
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Call&#58; 0x2005 &#40;rpcf_add_user&#41;
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Real Call&#58; 0x2005 &#40;rpcf_add_user&#41;
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 UTM5 DBA&#58; DBAccess instance created
?Debug &#58; Apr 13 13&#58;04&#58;53 b3036b70 DBA&#58;Ctx&#58; Looking for free context &#40;system=0&#41;
?Debug &#58; Apr 13 13&#58;04&#58;54 b3036b70 DBA&#58;Ctx&#58; Pushing back free context &#40;system=0&#41;
-Stats &#58; Apr 13 13&#58;04&#58;54 b3036b70 UTM5 DBA&#58;     Stats&#58; Uptime&#58; 00&#58;00&#58;01. Events&#58; 0; Errors&#58; 0
?Debug &#58; Apr 13 13&#58;04&#58;54 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Call 0x2005 &#40;rpcf_add_user&#41; finished...
?Debug &#58; Apr 13 13&#58;04&#58;54 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Stream cleared
 Warn  &#58; Apr 13 13&#58;04&#58;54 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Session closed
?Debug &#58; Apr 13 13&#58;04&#58;54 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Session Key <4575a54d6407b68e1c07cc634ff6376a> stored for UID -1 from <127.0.0.1>
?Debug &#58; Apr 13 13&#58;04&#58;54 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; SSL cleared
?Debug &#58; Apr 13 13&#58;04&#58;54 b3036b70 StreamManager&#58; connection <58> closed
?Debug &#58; Apr 13 13&#58;04&#58;54 b3036b70 RPCConn&#91;SSL&#93;<init@127.0.0.1>&#58; Session closed...
?Debug &#58; Apr 13 13&#58;05&#58;02 b353bb70 TransactionQueueManager&#58; pushing transaction <0x9a0eda8> into queue <0> &#40;default&#41;
?Debug &#58; Apr 13 13&#58;05&#58;02 b353bb70 TransactionHandlerImpl&#58; push&#58; transaction ptr <0x09a0eda8> &#40;size 1, Events &#91; 114 &#93;&#41;
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 TransactionHandlerImpl&#58; queue size&#58; 0
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 TransactionHandlerImpl&#58; incoming transaction ptr <0x09a0eda8>, outgoing transaction ptr <0x09a731d0>
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 DBA&#58;Ctx&#58; Looking for free context &#40;system=1&#41;
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 DBCtx&#58; <154791752> SQL query&#58; BEGIN
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 DBCtx&#58; DB transaction begin
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 PluginManagerImpl&#58; Got DynaShapePlugin plugin for event EventShapingCheckTimeranges/114
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 DBCtx&#58; <154791752> SQL query&#58; COMMIT
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 DBCtx&#58; DB transaction commit
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 TransactionFilter&#58; transaction sent to the internal queue
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 TransactionQueueManager&#58; pushing transaction <0x9a731d0> into queue <0> &#40;default&#41;
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 TransactionHandlerImpl&#58; push&#58; empty transaction ptr <0x09a731d0> dropped
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 DummyTransactionQueue&#58; commit&#58; 0 transactions
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 DBA&#58;Ctx&#58; Pushing back free context &#40;system=1&#41;
?Debug &#58; Apr 13 13&#58;05&#58;02 b70eeb70 TransactionHandlerImpl&#58; incoming transaction ptr <0x09a0eda8> done
А вот если написать

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

urfaclient -a blabla > output.txt
должно ли оно в нормальной ситуации отправить вывод в файл? а то подозреваю, что проблема у меня не в пхп

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

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

utm# /netup/utm5/bin/utm5_urfaclient -a whoami >234
 Notice&#58; Apr 13 14&#58;16&#58;37 0806e000 UTM5 Config&#58; Processing config file&#58; /netup/utm5/utm5_urfaclient.cfg
Processing action&#58; whoami

utm# cat 234 | head
<?xml version="1.0"?>
<urfa>
  <session key="0578a54da8a5d135427aaafecb123516"/>
  <call function="rpcf_whoami">
    <output>
      <integer name="my_uid" value="-5"/>
      <string name="login" value="urfa"/>
      <ip_address name="user_ip" value="127.0.0.1"/>
      <ip_address name="user_mask" value="255.255.255.255"/>
      <integer name="system_group_size" value="1"/>

ssb
Сообщения: 25
Зарегистрирован: Ср апр 13, 2011 11:12
Откуда: Киев
Контактная информация:

Сообщение ssb »

о, так уже работает... хотя вчера создавало пустой файл.
в итоге решил проблему костылём: перенаправляю вывод в файл с последующим чтением файла

dwemer
Сообщения: 276
Зарегистрирован: Чт янв 25, 2007 05:59

Сообщение dwemer »

exec($cmd, $lines, $ret);

foreach ($lines as $line) $out .= $line . "\n";

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

ssb писал(а):о, так уже работает... хотя вчера создавало пустой файл.
в итоге решил проблему костылём: перенаправляю вывод в файл с последующим чтением файла
мсье знает толк в извращениях

Ответить