【问题标题】:How can I pass parameters from php to a script in linux?如何将参数从 php 传递到 linux 中的脚本?
【发布时间】:2019-01-28 22:42:01
【问题描述】:

我正在尝试通过传递三个参数从 php 运行脚本。问题是我只能很好地传递第一个参数。

代码:

$asd=$name;
for($i=0;$i<count($checkbox);$i++){
$raid=$checkbox[$i];

$asd=$asd ." ". $raid;

}
  $railvl1 = exec("sh /var/www/proyecto/borrarraid1.sh ".$asd);

$name 有一个字符串,$raid 包含复选框数组。

如果我使用 vardump 或死于 $ asd,它会显示以下内容。

string(15) "md2 sdc sdd "

我的脚本有这个:

mkdir $1
mkdir $2
mkdir $3

只创建 md2 文件夹,调用 :sdd? 创建 sdc 文件夹并且最后一个文件夹 sdd 没有创建。

有什么建议吗?

【问题讨论】:

标签: php linux bash


【解决方案1】:

!使用escapeshellarg函数防止shell注入攻击:

$asd = escapeshellarg($name);
for($i=0; $i<count($checkbox); $i++){
    $raid = $checkbox[$i];
    $asd = $asd ." ". escapeshellarg($raid);
}

$last_line = exec("sh /var/www/proyecto/borrarraid1.sh ". $asd, $output, $retval);

$output_delimiter = '<br/>'
if ($retval !== 0) {
    echo "Error while executing command", $output_delimiter;
    echo implode($output, $output_delimiter);
} else {
    echo "The command was executed successfully", $output_delimiter;
    echo implode($output, $output_delimiter);
}

PS:exec() 手册页:http://php.net/manual/en/function.exec.php

【讨论】:

  • 我正在尝试按照你说的做,但它不起作用。它是什么或它做了什么 $output, $retval ??
  • 在你的问题中使用了exec()。我只是用了你所拥有的。有了这个,我必须假设你知道exec() 是如何工作的,因此没有解释它。 $output$retval 通过引用传递,让您有机会获得命令的完整输出及其返回值。无论如何,如果您想知道它是如何工作的,阅读exec() 的手册:php.net/manual/en/function.exec.php
【解决方案2】:

你可以用不同的方式来做,看看我的例子! 试试这个

$name = '';
$checkbox = ['FolderA', 'FolderB', 'FolderC'];

$checkboxes = implode(' ', $checkbox);
$name .= " $checkboxes" ;
$output = shell_exec("/var/www/proyecto/borrarraid1.sh $name");

sh 文件

set folder1 [lindex $argv 0]
set folder2 [lindex $argv 1]
set folder3 [lindex $argv 2]

mkdir folder1
mkdir folder2
mkdir folder3

【讨论】:

    【解决方案3】:

    请尝试

     $railvl1 = exec("sh /var/www/proyecto/borrarraid1.sh '{$asd}'");
    

    【讨论】:

    • 您好,感谢您的帮助。我照您说的做了,但效果并不好。我已经创建了 3 个文件夹,但它们被称为 md2(ok)、sdd?和 sdc ?为什么呢?到底是什么?prntscr.com/mdhz30
    • 如果$asd 包含引号怎么办? @andoni 使用 escapeshellarg 如我所示:stackoverflow.com/a/54411650/171318。这个答案是错误的,而且非常有问题,因为它可能允许黑客访问您的后端。
    猜你喜欢
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2012-05-09
    • 2011-08-05
    • 2020-12-31
    相关资源
    最近更新 更多