php - 用 php 为 Asterisk AMI 分离部分 fread 输出

标签 php linux asterisk centos7 fread

我有一个问题让我最近几天一直很忙。 我正在使用 Asterisk AMI。

AMI 给出这样的输出。

    Event: RTCPSent
Privilege: reporting,all
Channel: SIP/1001-00000000
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: <unknown>
CallerIDName: SIP/1001
ConnectedLineNum: <unknown>
ConnectedLineName: SIP/1001
Language: ja
AccountCode: 
Context: phones
Exten: 1000
Priority: 4
Uniqueid: 1535617422.0
Linkedid: 1535617422.0
To: 111.108.30.208:61987
From: 172.31.21.5:20687
SSRC: 0x5847ea3c
PT: 200(SR)

Event: RTCPReceived
Privilege: reporting,all
Channel: SIP/1001-00000000
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: <unknown>
CallerIDName: SIP/1001
ConnectedLineNum: <unknown>
ConnectedLineName: SIP/1001
Language: ja
AccountCode: 
Context: phones
Exten: 1000
Priority: 4
Uniqueid: 1535617422.0
Linkedid: 1535617422.0
To: 172.31.21.5:20687
From: 111.108.30.208:61987
RTT: 0.0116
SSRC: 0x235022ee
PT: 200(SR)

Event: RTCPSent
Privilege: reporting,all
Channel: SIP/1000-00000001
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: 1000
CallerIDName: SIP/1001
ConnectedLineNum: <unknown>
ConnectedLineName: SIP/1001
Language: ja
AccountCode: 
Context: phones
Exten: 
Priority: 1
Uniqueid: 1535617431.1
Linkedid: 1535617422.0
To: 111.108.30.208:61044
From: 172.31.21.5:20349
SSRC: 0x0cb019a0
PT: 200(SR)

Event: RTCPReceived
Privilege: reporting,all
Channel: SIP/1000-00000001
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: 1000
CallerIDName: SIP/1001
ConnectedLineNum: <unknown>
ConnectedLineName: SIP/1001
Language: ja
AccountCode: 
Context: phones
Exten: 
Priority: 1
Uniqueid: 1535617431.1
Linkedid: 1535617422.0
To: 172.31.21.5:20349
From: 111.108.30.208:61044
RTT: 0.0115
SSRC: 0x00294823
PT: 200(SR)

我使用 fread() 函数收集输出。

fread($fp, 8192);

[$fp 是上面的输出]

这可行,但逐行给出输出。 获得此信息的正确方法是从空白行到空白行。

    Event: RTCPReceived
Privilege: reporting,all
Channel: SIP/1001-00000000
ChannelState: 6
ChannelStateDesc: Up
CallerIDNum: <unknown>
CallerIDName: SIP/1001
ConnectedLineNum: <unknown>
ConnectedLineName: SIP/1001
Language: ja
AccountCode: 
Context: phones
Exten: 1000
Priority: 4
Uniqueid: 1535617422.0
Linkedid: 1535617422.0
To: 172.31.21.5:20687
From: 111.108.30.208:61987
RTT: 0.0116
SSRC: 0x235022ee
PT: 200(SR)

这样我就可以收集所需的信息并执行以下步骤。

这可以用 fread 函数实现吗?

我需要阅读信息,例如谁接了电话或挂断电话。

您的意见将一如既往地受到高度赞赏

最佳答案

不,不可能。

您应该逐行读取循环中的行,直到得到空行并在需要时将其合并到缓冲区中。

关于php - 用 php 为 Asterisk AMI 分离部分 fread 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52092557/

相关文章:

php - Symfony 4 Form - Ajax 选择人口

使用 PROMPT_COMMAND 时,Python venv 模块无法将虚拟环境名称添加到 PS1?

linux - ksh su -c 返回值

linux - 当我要求查看 public_html 文件夹中的所有目录时,在 putty 中它只返回 2 个文件夹

php - mysql获取列值的最后两个字符,其中值长度等于X

php - Laravel:从 View 添加字段(用户:批量可分配属性)

php - 如何检查网站是否正常运行并长期存储结果

javascript - Node ARI 客户端 |连接方法不触发回调?

c# - 如何从我刚刚发起的调用中获取 UniqueId 和 channel 名称?

linux - freeswitch sip 中继收不到呼入电话