如何使用 php 执行 shell 脚本?
How to execute shell script using php?
我尝试在 Asterisk 中监控调用。
如果我想监听事件,我必须使用此命令启动服务,并且我将 bash 文件存储在 /etc/rc.d/init.d/asterisk_ipu_gui.bash
service asterisk_ipu_gui start
然后我登录 Asterisk CLI,并使用这些命令检查状态
asterisk -vvvr
manager show connected
如图所示:
如果它有 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
<?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,尤其是用户贡献的注释
试试这个。正如我在上面的评论中提到的,它使用与登录相同的命令发出命令:
$output1 = shell_exec('service asterisk_ipu_gui start');
$output2 = shell_exec('asterisk -vvvr "manager show connected"');
$output2
现在应该符合您的预期结果。
此外,尝试将您的 www-data 用户添加到 asterisk 组,这可能是由于权限和所有权问题。如果您可以使用 127.0.0.1 在本地执行此操作,则意味着您的本地用户可以执行此操作并且可以正常工作,但是当 php 通过 www-data 尝试时,它会失败。
与其让 php 执行每个 shell 命令,不如尝试将所有命令放在 shell 脚本中,然后使用 php.[=12= 执行该脚本]
您可以在 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";
?>
如果你的 php 有访问 asterisk 的 root 权限那么它应该可以工作
也代替了
$output2 = shell_exec('asterisk -vvvr');
$output3 = shell_exec('manager show connected');
尝试
$output2 = shell_exec('asterisk -rx "manager show connected"');
我尝试在 Asterisk 中监控调用。
如果我想监听事件,我必须使用此命令启动服务,并且我将 bash 文件存储在 /etc/rc.d/init.d/asterisk_ipu_gui.bash
service asterisk_ipu_gui start
然后我登录 Asterisk CLI,并使用这些命令检查状态
asterisk -vvvr
manager show connected
如图所示:
如果它有 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
<?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,尤其是用户贡献的注释
试试这个。正如我在上面的评论中提到的,它使用与登录相同的命令发出命令:
$output1 = shell_exec('service asterisk_ipu_gui start');
$output2 = shell_exec('asterisk -vvvr "manager show connected"');
$output2
现在应该符合您的预期结果。
此外,尝试将您的 www-data 用户添加到 asterisk 组,这可能是由于权限和所有权问题。如果您可以使用 127.0.0.1 在本地执行此操作,则意味着您的本地用户可以执行此操作并且可以正常工作,但是当 php 通过 www-data 尝试时,它会失败。
与其让 php 执行每个 shell 命令,不如尝试将所有命令放在 shell 脚本中,然后使用 php.[=12= 执行该脚本]
您可以在 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";
?>
如果你的 php 有访问 asterisk 的 root 权限那么它应该可以工作
也代替了
$output2 = shell_exec('asterisk -vvvr');
$output3 = shell_exec('manager show connected');
尝试
$output2 = shell_exec('asterisk -rx "manager show connected"');