如何使用php执行shell脚本?

时间:2017-02-13 16:24:10

标签: php shell asterisk

我尝试用星号监听电话。

如果我想监听事件,我必须使用此命令启动服务,并将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>";
?>

4 个答案:

答案 0 :(得分: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,特别是用户贡献笔记

答案 1 :(得分:0)

试试这个。它在与我在上面的评论中提到的登录相同的命令中发出命令:

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

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

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

答案 2 :(得分: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"; 
?>

答案 3 :(得分: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