如何使用php执行shell脚本?

问题描述 投票:0回答:4

我尝试监视星号中的呼叫。

如果我想听事件,我必须使用此命令启动服务,并将bash文件存储在/etc/rc.d/init.d/asterisk_ipu_gui.bash中

service asterisk_ipu_gui start

然后我登录Asterisk CLI,并使用以下命令检查状态

asterisk -vvvr
manager show connected

在图片中显示:

enter image description here

如果它的IP地址为127.0.0.0 --->启动服务成功。

这是手册,现在我想使用PHP执行该Shell脚本。我该怎么做?

我这样写代码,但不起作用。

<?php
 $output1 = shell_exec('service asterisk_ipu_gui start');
 $output2 = shell_exec('asterisk -vvvr');
 $output3 = shell_exec('manager show connected');
echo "<pre>$output3</pre>";
?>
php shell asterisk
4个回答
0
投票

您应该在每个命令后加上回声

<?php
$output1 = shell_exec('service asterisk_ipu_gui start');
echo "<pre>$output1</pre>";
$output2 = shell_exec('asterisk -vvvr');
echo "<pre>$output2</pre>";
$output3 = shell_exec('manager show connected');
echo "<pre>$output3</pre>";
?>

还查看manual,尤其是用户贡献的注释


0
投票

不是让PHP执行每个shell命令,而是尝试将所有命令放入shell脚本,然后使用php执行该脚本。

您可以在asterisk.sh中拥有命令

#!/bin/bash
service asterisk_ipu_gui start
asterisk -vvvr
manager show connected

现在使用php执行:

<?php 
$output = shell_exec('/home/user/scripts/asterisk.sh'); 
echo "$output"; 
?>

0
投票

尝试一下。它以与我在上面的评论中提到的登录名相同的命令发布该命令:

 $output1 = shell_exec('service asterisk_ipu_gui start');
 $output2 = shell_exec('asterisk -vvvr "manager show connected"');

$output2现在应该保持您的预期结果。

此外,请尝试将您的www数据用户添加到星号组,这可能是由于权限和所有权问题所致。如果您可以使用127.0.0.1在本地进行操作,则意味着您的本地用户可以使用它并且可以运行,但是当php通过www-data尝试运行时,它将失败。


0
投票

如果您的php具有访问星号的root权限,则应该可以使用

也代替

 $output2 = shell_exec('asterisk -vvvr');
 $output3 = shell_exec('manager show connected');

尝试

$output2 = shell_exec('asterisk -rx "manager show connected"');

The simplest way to control Asterisk from an external shell

© www.soinside.com 2019 - 2024. All rights reserved.