Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux中的php excute命令星号_Php_Linux_Asterisk - Fatal编程技术网

linux中的php excute命令星号

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

我尝试在下面的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
,通常):

尝试使用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);

?>