linux中的php excute命令星号
我尝试在下面的php中执行命令linux:linux中的php excute命令星号,php,linux,asterisk,Php,Linux,Asterisk,我尝试在下面的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
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
,通常):
尝试使用excapeshellcmd()
检查此链接从PHP执行特权命令(如
asterisk
)从根本上是错误的-您的web服务器可能无法执行此操作,如果您将其配置为能够执行,则可能会打开一个大的安全漏洞。此外,从PHP执行外部命令本身就很慢
相反,您应该使用(AMI)。AMI绑定到许多语言,包括PHP
您可以在此处找到示例:
另一个示例可能如下所示(借用自):
此解决方案唯一的一点不便是需要配置Asterisk Manager界面,在Asterisk实例中默认情况下可能不会启用该界面。注意,您的web服务器通常在apache下运行
我不认为您可以从apache用户处运行该命令。因此,您具有修复访问权限(在asterisk.conf文件change user或httpd.conf中),并在命令末尾重试添加
2&>1
。您可能会收到错误。如下所示:asterisk-rx“core show Channel”2&>1
。它将错误输出重定向到常规输出。不给出错误。不显示anything@bugfixer:这还不足以说明问题所在。正如我所说,您需要首先配置AMI,这本身就是一项独立的任务
exec('/usr/sbin/asterisk -rx "core show channels 2>&1"',$out);
$command = "core show channels";
$excape = excapeshellcmd($command);
exec('asterisk -rx $excape',$out);
print_r($out);
<?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);
?>