将PHP变量传递给远程bash脚本

将PHP变量传递给远程bash脚本,php,bash,shell,get,ssh2-exec,Php,Bash,Shell,Get,Ssh2 Exec,有没有类似于PHP的GET for bash脚本的方法 这就是我想做的 PHP文件设置一个变量并执行一个远程bash脚本,该变量被传递并在bash脚本中使用 这是我的PHP脚本 <?php $myvar = 'hello world'; $connection = ssh2_connect('example.com', 22); ssh2_auth_password($connection, 'username', 'password'); $stream = ssh2_ex

有没有类似于PHP的GET for bash脚本的方法

这就是我想做的

PHP文件设置一个变量并执行一个远程bash脚本,该变量被传递并在bash脚本中使用

这是我的PHP脚本

 <?php
 $myvar = 'hello world';

 $connection = ssh2_connect('example.com', 22);
 ssh2_auth_password($connection, 'username', 'password');

 $stream = ssh2_exec($connection, '/usr/incoming/myscript.sh');
 ?>
当然,这不起作用,因为我不知道如何将$myvar从PHP文件传递到myscript.sh


我知道PHP是使用GET完成的,但在这种情况下我该如何做?

正如@Phylogenesis所评论的,您只需将变量放在脚本调用之后,然后在bash脚本中调用使用
$1
读取变量:

您的bash脚本如下所示:

#!/bin/bash          
 echo "$1"

正如@Phylogenesis所评论的,您只需将变量放在脚本调用之后,然后在bash脚本中调用使用
$1
读取变量:

您的bash脚本如下所示:

#!/bin/bash          
 echo "$1"
script.php

 <?php
 $myvar = 'hello world';
 $myvar = escapeshellarg($myvar);
 $connection = ssh2_connect('example.com', 22);
 ssh2_auth_password($connection, 'username', 'password');
 $stream = ssh2_exec($connection, '/usr/incoming/myscript.sh '.$myvar);
script.php

 <?php
 $myvar = 'hello world';
 $myvar = escapeshellarg($myvar);
 $connection = ssh2_connect('example.com', 22);
 ssh2_auth_password($connection, 'username', 'password');
 $stream = ssh2_exec($connection, '/usr/incoming/myscript.sh '.$myvar);

我最近发布了一个项目,它允许PHP获得一个真正的Bash shell并与之交互,甚至可以通过SSH。在这里获取:

下载后,您只需使用以下代码:

$shell = \MTS\Factories::getDevices()->getRemoteHost('example.com')->getShellBySsh('username', 'secretPassword');

//instead of triggering a script, just trigger the individual commands i.e.:
$return1  = $shell->exeCmd("echo \$myvar");

我最近发布了一个项目,它允许PHP获得一个真正的Bash shell并与之交互,甚至可以通过SSH。在这里获取:

下载后,您只需使用以下代码:

$shell = \MTS\Factories::getDevices()->getRemoteHost('example.com')->getShellBySsh('username', 'secretPassword');

//instead of triggering a script, just trigger the individual commands i.e.:
$return1  = $shell->exeCmd("echo \$myvar");


shell脚本中的参数被引用为
$1
$2
$3
。。。只需将它们添加到exec调用中:
ssh2_exec($connection,'/usr/incoming/myscript.sh param1 param2')。您的shell脚本无法看到php变量。如果在php进程环境中设置该变量,那么它应该在shell脚本的环境(以及php脚本生成的每个其他进程的环境)中可用,然后shell脚本应该可以正常工作。您还可以将变量作为其命令行上的参数传递给脚本。是的,但如何从PHP脚本中获取它们?@EtanReisner您能给我一个如何设置正确变量的示例吗?@Grant请查看对我的注释的编辑。shell脚本中的参数被引用为
$1
$2
$3
。。。只需将它们添加到exec调用中:
ssh2_exec($connection,'/usr/incoming/myscript.sh param1 param2')。您的shell脚本无法看到php变量。如果在php进程环境中设置该变量,那么它应该在shell脚本的环境(以及php脚本生成的每个其他进程的环境)中可用,然后shell脚本应该可以正常工作。您也可以在脚本的命令行上将变量作为参数传递给脚本。是的,但是如何从PHP脚本中获取它们?@EtanReisner您能给我一个如何设置正确变量的示例吗?@Grant请查看对我的注释的编辑。这将中断(并且中断严重)如果php中的
$myvar
的值可以包含单引号。需要在命令行上展开的变量需要正确转义以确保安全。啊,好吧,现在它是有意义的,所以我像上面提到的那样传递它,然后在脚本中用$1调用它,对吗?更可能是像escapeshellarg()之类的东西,不,只有在它可能包含某些内容时才这样做。你总是这样做,因为它可能包含一些东西。其他任何事情都是一个有待解决的安全问题。bash脚本应该引用
$1
。如果php中的
$myvar
的值可以包含单引号,则这将中断(并且中断得很严重)。需要在命令行上展开的变量需要正确转义以确保安全。啊,好吧,现在它是有意义的,所以我像上面提到的那样传递它,然后在脚本中用$1调用它,对吗?更可能是像escapeshellarg()之类的东西,不,只有在它可能包含某些内容时才这样做。你总是这样做,因为它可能包含一些东西。其他任何事情都是一个等待发生的安全问题。bash脚本应该引用
$1
。这将从shell脚本打印
hello
,因为
$myvar
将被shell拆分。需要在命令行上展开的变量需要正确转义以确保安全。我相信escapeshellarg将完成此操作。它将从shell脚本中打印
hello
,因为
$myvar
将由shell拆分。需要在命令行上展开的变量需要正确转义以确保安全。我相信escapeshellarg可以