【问题标题】:Run a script on a computer from php从 php 在计算机上运行脚本
【发布时间】:2012-01-29 21:45:11
【问题描述】:

我尝试从 php 执行 shell 命令失败。目标是通过互联网打开/关闭我的计算机/服务器的音乐播放器(例如我的手机)。这是我能做的:

我有一个非常简单的文件“play.sh”: 代码:

xdotool key XF86AudioPlay;
echo "switched";

如果我运行它 ./play.sh,它可以工作(音乐播放器打开/关闭)

然后我有另一个非常简单的 php 文件“play.php”: 代码:

<?php echo shell_exec("./play.sh"); ?>

这两个文件位于我的服务器的主文件夹中,该文件夹是我计算机的一个分区。 (我正在使用lampp)但是我的电脑正在播放音乐。

但是当我打开 localhost/play.php 时,我可以看到“已切换”,显示 sh 文件已执行,但声音没有关闭。

我刚试了exec(),shell_exec(),passthru(),system(),..用./play.sh和/opt/lampp/.../play.php结果完全一样,也没有报错..: /

但这很奇怪,我不确定,但我认为我在计算机端运行的与我在服务器端运行的不同。我的意思是这就像声音在虚拟服务器上打开/关闭,但与我电脑的声音没有联系。这可能是一个解释.. 但是,如何从互联网/我的服务器在我的计算机上执行脚本..?

有人有这样做的想法吗?是不是apache的配置..?

谢谢!

编辑: 这是我解决问题的方法:

xhost + local:www-data

感谢大家的回复

【问题讨论】:

  • xdotoolan X 服务器发送命令。您的桌面可能正在显示器上运行:0 - 试试export DISPLAY=:0; xdotool key XF86AudioPlay;此外,您可能需要以自己的身份运行脚本 - PHP 代码可能以用户 www-data 或类似用户身份运行(只是脚本可能有问题的一些事情)
  • 也尝试使用xdtool的绝对路径,它可能不在apache PATH中
  • 添加2&gt;&amp;1 以获取错误消息。要授予 X 权限,请使用 xhost +localhost 作为最后的手段。
  • 不,我试过 export DISPLAY=:0; usr/bin/xdotool 键 XF86AudioPlay;但结果还是一样,我授予 localhost X 权限但仍然无法正常工作:/
  • 这里是 2>&1 的结果:未指定协议错误:无法打开显示::0 无法创建新的 xdo 实例切换!

标签: php execute lampp


【解决方案1】:

这可能是权限问题 - 请记住,当 PHP 运行命令时,它是以 webserver 运行的用户身份运行的,例如www-dataapache 或其他。如果您的音乐播放器以您自己的个人用户身份运行,则您的脚本在以其他用户身份运行时可能无法更改它。

【讨论】:

  • 是的,我想到了,所以我把这是我的 /etc/sudoers :www-data ALL=NOPASSWD: /sbin/iptables, /usr/bin/du, /usr/bin/ xdotool paul ALL=NOPASSWD: /sbin/iptables, /usr/bin/du, /usr/bin/xdotool apache ALL=NOPASSWD: /sbin/iptables, /usr/bin/du, /usr/bin/xdotool 和结果是一样的.. :/
【解决方案2】:

Shell_exec 有效。尝试将您的 .sh 脚本绝对路径放入可执行文件

/usr/bin/xdotool key XF86AudioPlay;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多