我尝试在PHP中执行命令Linux:
exec('asterisk -rx "core show channels"',$out);
print_r($out);
但是,不显示任何内容。如果您使用以下代码。
exec('ls -la',$out);
print_r($out);
浏览器显示与控制台中一样的输出。可以帮助?
正如@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);
尝试使用excapeshellcmd()
$command = "core show channels";
$excape = excapeshellcmd($command);
exec('asterisk -rx $excape',$out);
print_r($out);
查看链接excapeshellcmd()
从根本上说,从PHP中执行asterisk
这样的特权命令是错误的——你的web服务器可能无法这样做,如果你配置它能够这样做,你可能会打开一个大的安全漏洞。此外,从PHP执行外部命令本身就很慢。
您可以在这里找到示例:http://www.voip-info.org/wiki/view/Asterisk+manager+Example:+Command
另一个例子可能像这样(从这里借用):
<?php
$socket = fsockopen("asterisk-server","5038", $errno, $errstr, $timeout);
fputs($socket, "Action: Loginrn");
fputs($socket, "UserName: adminrn");
fputs($socket, "Secret: mypasswordrnrn");
fputs($socket, "Action: Commandrn");
fputs($socket, "Command: core show channelsrnrn");
$wrets=fgets($socket,256);
?>
这个解决方案唯一的轻微不便是必须配置Asterisk Manager Interface,它可能不会在您的Asterisk实例中默认启用。
注意,你的web服务器通常运行在apache下
不认为你可以从apache用户运行这个命令。所以你有固定的访问权限(在asterisk.conf文件中更改用户或在httpd.conf中)然后再试一次