php执行命令asterisk在linux中

时间:2014-06-11 07:42:03

标签: php linux asterisk

我尝试在php下面执行命令linux:

exec('asterisk -rx "core show channels"',$out);
print_r($out);

但是,没有任何显示。如果您使用以下代码。

exec('ls -la',$out);
print_r($out);

浏览器在控制台中显示输出。可以帮忙??

4 个答案:

答案 0 :(得分:3)

正如@Gerald Schneider所说,你可以尝试重定向stderr来捕捉可能的错误:

exec('asterisk -rx "core show channels 2>&1"',$out);

但我怀疑星号二进制文件不在$PATH中,或者至少不在PHP解释器可访问的路径中。

您可以尝试插入完整路径(通常为/usr/sbin/asterisk):

exec('/usr/sbin/asterisk -rx "core show channels 2>&1"',$out);

答案 1 :(得分:0)

尝试使用excapeshellcmd()

$command = "core show channels";
$excape = excapeshellcmd($command);
exec('asterisk -rx $excape',$out);
print_r($out);

点击此链接excapeshellcmd()

答案 2 :(得分:0)

从PHP执行特权命令(例如asterisk - 从根本上说是错误的 - 您的Web服务器可能无法执行此操作,如果您将其配置为能够,则可能会打开大的安全漏洞。此外,从PHP执行外部命令本质上很慢。

相反,您应该使用 Asterisk Manager Interface (AMI)。 AMI绑定了许多语言,包括PHP。

您可以在此处找到示例:http://www.voip-info.org/wiki/view/Asterisk+manager+Example:+Command

另一个例子可能是这样的(借鉴here):

<?php

$socket = fsockopen("asterisk-server","5038", $errno, $errstr, $timeout);
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: admin\r\n");
fputs($socket, "Secret: mypassword\r\n\r\n");

fputs($socket, "Action: Command\r\n");
fputs($socket, "Command: core show channels\r\n\r\n");
$wrets=fgets($socket,256);

?>

此解决方案唯一的轻微不便是必须配置Asterisk Manager接口,默认情况下可能无法在Asterisk实例中启用。

答案 3 :(得分:0)

注意,您的Web服务器通常在apache下运行

不认为您可以从apache用户运行该命令。所以你有修复权限(在asterisk.conf文件中更改用户或在httpd.conf中)并再试一次