如何使用php执行shell脚本?

如何使用php执行shell脚本?,php,shell,asterisk,Php,Shell,Asterisk,我试着用星号监视通话 若我想监听事件,我必须用这个命令启动服务,并将bash文件存储在那个里/etc/rc.d/init.d/asterisk\u ipu\u gui.bash service asterisk_ipu_gui start 和I login Asterisk CLI,并使用以下命令检查状态 asterisk -vvvr manager show connected 图片中的Ex show: 如果其IP地址为127.0.0.0--->则启动服务成功 这是手动的,现在我想用PH

我试着用星号监视通话

若我想监听事件,我必须用这个命令启动服务,并将bash文件存储在那个里/etc/rc.d/init.d/asterisk\u ipu\u gui.bash

service asterisk_ipu_gui start
和I login Asterisk CLI,并使用以下命令检查状态

asterisk -vvvr
manager show connected
图片中的Ex show:

如果其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>";
?>

您应该在每个命令后放置echo

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


还可以查看,特别是用户提供的笔记

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

$output2 = shell_exec('asterisk -rx "manager show connected"');
$output2
现在应该可以保存您的预期结果


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

与其让php执行每个shell命令,不如尝试将所有命令放在shell脚本中,然后使用php执行该脚本

您可以在asterisk.sh中使用命令

现在使用php执行该操作:


如果您的php具有访问asterisk的root权限,那么它应该可以工作

也代替

试一试


$output1或$output2是否显示任何内容?不,它没有显示任何内容您可以尝试/usr/bin/service而不是services谢谢让我试试。显然,从您的图像来看,当您运行
asterisk-vvvr
时,您正在进入其服务器,PHP只能在运行代码的服务器的同一级别上执行命令。它不工作。我将bash文件存储在/etc/rc.d/init.d/asterisk_ipu_gui.bashYes中。在手册中,我是root用户。但在php Imaybe中,我不是。那么我如何修复它呢?从命令行尝试一下,这将把apache用户添加到asterisk组:
sudo usermod-a-G asterisk www-data
。然后运行php脚本。Shell响应:www数据不存在如果我使用adduser www data asterisk,那么我应该使用哪种模式-b、 -c,-d,…?重要的问题是$output1=shell_exec('service asterisk_ipu_gui start');不能通过PHP工作。我受够了。试着像这样给出完整的路径
#!/bin/bash
service asterisk_ipu_gui start
asterisk -vvvr
manager show connected
<?php 
$output = shell_exec('/home/user/scripts/asterisk.sh'); 
echo "$output"; 
?>
 $output2 = shell_exec('asterisk -vvvr');
 $output3 = shell_exec('manager show connected');
$output2 = shell_exec('asterisk -rx "manager show connected"');