Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP shell_exec won';我不能和侏儒一起工作_Php_Bash_Gnome_Shell Exec - Fatal编程技术网

PHP shell_exec won';我不能和侏儒一起工作

PHP shell_exec won';我不能和侏儒一起工作,php,bash,gnome,shell-exec,Php,Bash,Gnome,Shell Exec,在终端窗口中运行alert 9时,会弹出一个对话框,告诉我9 但是,在shell_exec中运行alert 9不会产生任何效果 我应该知道什么 只需提及:其他与GUI交互的命令都不起作用。我正在使用gnome 3.16.3 更新 我的具体目标是使用gnome环境运行命令。(xdotool键ctrl+shift+u)我认为PHP正在启动一个不知道X11环境的shell,您需要设置$DISPLAY环境变量。尝试对shell_exec进行以下修改: shell_exec("DISPLAY=\":0

在终端窗口中运行
alert 9
时,会弹出一个对话框,告诉我
9

但是,在
shell_exec
中运行
alert 9
不会产生任何效果


我应该知道什么

只需提及:其他与GUI交互的命令都不起作用。我正在使用gnome 3.16.3


更新


我的具体目标是使用gnome环境运行命令。(
xdotool键ctrl+shift+u

我认为PHP正在启动一个不知道X11环境的shell,您需要设置
$DISPLAY
环境变量。尝试对shell_exec进行以下修改:

shell_exec("DISPLAY=\":0\" alert 9");

我相信PHP正在启动一个不知道X11环境的shell,您需要设置
$DISPLAY
环境变量。尝试对shell_exec进行以下修改:

shell_exec("DISPLAY=\":0\" alert 9");

alert
不是一个标准命令,至少在RedHatSolarisAIX上是这样,因此您必须在问题中提到它是一个专有命令/程序

您的<代码>警报>代码>脚本/程序不考虑在标准或文件输出中刷新文本数据,因此不能使用管道<强> > <>强>重定向,或重定向<强> >强>,最后,PHP函数<代码> SeLyReXixExcor(< /代码>)可以捕获任何


也许您可以重定向图形数据(我不确定),但一般来说,图形服务器使用它

alert
不是标准命令,至少在RedHatSolarisAIX上是这样,所以您必须在问题中提到它是一个专有命令/程序

您的<代码>警报>代码>脚本/程序不考虑在标准或文件输出中刷新文本数据,因此不能使用管道<强> > <>强>重定向,或重定向<强> >强>,最后,PHP函数<代码> SeLyReXixExcor(< /代码>)可以捕获任何


也许您可以重定向图形数据(我不确定),但通常情况下,图形服务器使用它

警报
不是命令,而是
通知发送
的别名。别名只加载在交互式shell中,因此它不是测试
shel_exec
的最佳选择

这两个命令可以很好地与php cli配合使用:

$ php -r "shell_exec('notify-send 9');"
$ php -r "shell_exec('xdotool key ctrl+shift+u');"
第一个在通知区域弹出9,最后一个输出突出显示“u”


带有mod_php的Apache是一个守护进程,是
init
的子进程,它对xserver一无所知。例如,如果您从
$php-S 0:8080
之类的xserver中的终端运行php内置web服务器,它将按预期工作。

警报
不是命令,而是
通知发送
的别名。别名只加载在交互式shell中,因此它不是测试
shel_exec
的最佳选择

这两个命令可以很好地与php cli配合使用:

$ php -r "shell_exec('notify-send 9');"
$ php -r "shell_exec('xdotool key ctrl+shift+u');"
第一个在通知区域弹出9,最后一个输出突出显示“u”



带有mod_php的Apache是一个守护进程,是
init
的子进程,它对xserver一无所知。例如,如果您在
$php-s0:8080
中的终端上运行php内置web服务器,它将按预期工作。

@SteJ您的意思是
$DISPLAY
。哇!是的,我的意思确实是
$DISPLAY
——对不起,我建议PHP不知道您的X11环境。尝试在脚本中设置$DISPLAY环境变量?这听起来是一个可行的解决方案。我如何才能正确部署此方法?根据@Halayem Anis的答案更新赏金描述:答案不必使用具体命令
警报9
@SteJ你的意思是
$DISPLAY
。哇!是的,我的意思确实是
$DISPLAY
——对不起,我建议PHP不知道您的X11环境。尝试在脚本中设置$DISPLAY环境变量?这听起来是一个可行的解决方案。我如何才能正确部署此方法?根据@Halayem Anis的答案更新赏金描述:答案不必使用具体命令
警报9
。回答得好。但是,运行此命令也不会从shell_exec中产生任何结果。它在通过gnome终端手动执行时工作。顺便问一下,您的PHP脚本是否与您登录并启动X的用户相同?您的X会话将仅授权给您的用户;您可以使用
xauth
命令来授权其他用户和主机,但这可能是一个真正的难题。您是否从shell_exec返回任何错误?我绝对没有得到任何输出,没有错误。如果我问shell_exec的
whoami
,我就是
www data
。但是,我可以使用
sudo-u myuser whoami
(>
myuser
)切换到我的用户这是一种方式吗?是的,wwwdata将无法访问您的X服务器。我一般不建议在php脚本中使用sudo命令,因为这是一个即将发生的漏洞,但如果该脚本仅适用于您,并且不会公开提供,那么它至少会证明这确实是一个问题。最终的答案是将www数据添加到xauth中;虽然我已经很久没有这样做了,所以我对细节有点模糊。测试这一理论的另一种方法是以www数据的形式登录到x会话,但不建议这样做-www数据通常在配置时没有专门的密码,以防止用户以该用户的身份登录。答案很好。但是,运行此命令也不会从shell_exec中产生任何结果。它在通过gnome终端手动执行时工作。顺便问一下,您的PHP脚本是否与您登录并启动X的用户相同?您的X会话将仅授权给您的用户;您可以使用
xauth
命令来授权其他用户和主机,但这可能是获得wor的真正困难