在本地linux服务器(Rapsberry Pi debian stretch with desktop)上,我正在使用php、exec和bash脚本向一个正在运行的大胆媒体播放器发送"audtool“命令。当服务器使用用户"pi“启动时,Audacious会自动启动。我已经设置了apache2和php并在服务器上工作,我可以通过ssh连接到服务器并从cli运行所有命令。我相信我已经解决了运行audtool (dbus并设置正确的环境变量)和在命令行上运行php的问题。然而,当在网页上运行php时,我得到了一长串关于apache2的信息。
为了达到这个阶段,我花了几个小时(花了一整天)在网络上研究这个问题,我几乎可以触摸到它,但却卡在了最后一个元素上。该示例显示正在运行的Audacious实例中的当前歌曲。Audtool需要一个正在运行的dbus (查找显示器)。使用exec或bash运行shell_exec命令没有任何问题。
php页面(cursong.php):
<?php
echo exec('/var/www/html/cursong.sh');
?>bash脚本(cursong.sh):
#!/bin/bash
##call current song
pid=`pidof audacious`
user=`ps -p $pid -o user=`
export `strings /proc/$pid/environ | grep DBUS_SESSION_BUS_ADDRESS`
sudo -E -su $user /usr/bin/audtool --current-song(从这里:https://redmine.audacious-media-player.org/boards/1/topics/1058?r=1059)
命令行输出: php -f cursong.php
Artist - Song Title (for example - so this works)网页上的输出:
declare -x APACHE_LOCK_DIR="/var/lock/apache2" declare -x
APACHE_LOG_DIR="/var/log/apache2" declare -x
APACHE_PID_FILE="/var/run/apache2/apache2.pid" declare -x
APACHE_RUN_DIR="/var/run/apache2" declare -x APACHE_RUN_GROUP="www-
data" declare -x APACHE_RUN_USER="www-data" declare -x
INVOCATION_ID="4ce76136ca8842bd9108d6b1b9a5b9ed" declare -x
JOURNAL_STREAM="8:23896" declare -x LANG="C" declare -x OLDPWD
declare -x
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
declare -x PWD="/var/www/html" declare -x SHLVL="1"我在/etc/sudoers中使用以下内容设置了apache2用户www-data:
www-data ALL=NOPASSWD: ALL和/var/www/html对任何人来说都是rwx
显然,我期待着在网页上看到“艺术家-歌曲标题”,但我得到的却是所有的apache2信息。我遗漏了什么,或者我哪里错了?
发布于 2018-12-30 23:21:45
我讨厌回答自己的问题,让人觉得我不够努力!经过大约五个小时的搜索和尝试修复后,我在so上偶然发现了这篇文章:
Running command-line application from PHP as specific user
建议在-u文件的执行文件中添加"sudo php用户“。我用"pi“用户试了试,还是不起作用,然后我简单地用"sudo”试了试,嘿,马上!!
php文件现在看起来像这样:
<?php
echo shell_exec('sudo /var/www/html/cursong.sh 2>&1');
?>现在测试一下它如何与其他audtool命令一起工作,这些命令不要求响应,但需要audacious的操作,并看看如何通过向bash脚本传递一个参数来减少php文件的脚本编写!
发布于 2018-12-31 01:43:01
为了完整起见,php和bash脚本用于请求和操作,使用一个参数传递给php url,然后传递给bash脚本:
带参数的PHP文件
<?php
$request = $_GET["request"];
echo shell_exec("sudo /var/www/html/cursong.sh \"${request}\" 2>&1");
?>url示例:
http://192.168.1.92/cursong.php?request="--playlist-shuffle-status" 带参数的Bash脚本
#!/bin/bash
##call request
pid=`pidof audacious`
user=`ps -p $pid -o user=`
export `strings /proc/$pid/environ | grep DBUS_SESSION_BUS_ADDRESS`
sudo -E -su $user /usr/bin/audtool $1用于操作的PHP文件
<?php
$action = $_GET["action"];
shell_exec('sudo /var/www/html/playsong.sh \"${request}\" ');
?>url示例:
http://192.168.1.92/cursong.php?action="--playback-play" 用于操作的Bash脚本
#!/bin/bash
##call action
pid=`pidof audacious`
user=`ps -p $pid -o user=`
export `strings /proc/$pid/environ | grep DBUS_SESSION_BUS_ADDRESS`
sudo -E -su $user /usr/bin/audtool $1https://stackoverflow.com/questions/53973541
复制相似问题