我尝试在php下面执行命令linux:
exec('asterisk -rx "core show channels"',$out);
print_r($out);
但是,没有任何显示。如果您使用以下代码。
exec('ls -la',$out);
print_r($out);
浏览器在控制台中显示输出。可以帮忙??
答案 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中)并再试一次