$arr =array(1,2);foreach($arras $v){++$v;}print _r($arr);
时间: 2023-09-06 22:07:39 浏览: 97
这段代码的输出结果为:
```
Array
(
[0] => 1
[1] => 2
)
```
这是因为在 foreach 循环中,$v 只是一个临时变量,它存储了 $arr 中每个元素的值。在循环体内对 $v 的修改不会影响到原数组 $arr 中元素的值。
因此,当执行 ++$v 时,只是将 $v 的值加 1,而不是将原数组 $arr 中对应的元素加 1。$arr 数组本身没有被修改,输出结果与初始值相同。
相关问题
有一道题目如下:长度不大于13,且只能使用$和_,获取其flag:<?php error_reporting(0); highlight_file(FILE); if (isset($_GET['debug'])) { // disable function phpinfo(); exit; } function count_string_char($str) { $arr = []; foreach (str_split($str) as $value) { if (!in_array($value, $arr)) { array_push($arr, $value); } } return sizeof($arr); } if (isset($_POST['cmd']) && is_string($_POST['cmd'])) { $cmd = $_POST['cmd']; $c = count_string_char($cmd); if ($c > 13) { die("$c too long"); } if ( preg_match('/[a-z0-9]|<|>|?|[|]|*|@|||^|~|&|\s/i', $cmd) ) { die("nonono"); } eval( "print($cmd);" ); } else { exit(); }
这是一道 PHP 命令注入的题目。通过注入命令,可以绕过代码中的限制,并最终获取 flag。
首先,我们来分析代码。这段代码开启了 PHP 的错误报告并输出当前文件的源代码。然后,如果 URL 中带有 debug 参数,就会禁用 phpinfo 函数并退出。
接下来是一个 count_string_char 函数,它的作用是返回一个字符串中不同字符的个数。在主函数中,如果接收到了 POST 请求中的 cmd 参数,就会通过 preg_match 函数判断该参数是否符合要求,即只包含 $ 和 _ 字符,并且长度不大于 13。如果符合要求,则会执行 eval 函数并传入该参数。
那么,我们可以尝试构造一个恶意的命令来获取 flag。首先,我们需要绕过长度限制。可以利用多个 $ 和 _ 字符组合成一个长的变量名,例如:
```
$$$$$$$$$$$$_flag
```
接下来,我们尝试注入一个命令来读取 flag 文件。我们可以使用 file_get_contents 函数来读取文件内容,如下所示:
```
file_get_contents('flag.php');
```
将以上两个命令结合起来,构造出以下的 payload:
```
$$$$$$$$$$$$_flag = file_get_contents('flag.php');
```
将该 payload 发送到 POST 请求中的 cmd 参数,即可成功获取 flag。
注意:在实际环境中,绝不能将 eval 函数用于接收用户输入的命令。这是非常危险的行为,可能会导致代码执行任意命令的漏洞。
$arr = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9), array(10, 11, 12), array(13, 14, 15), array(16, 17, 18), array(19, 20, 21), );用php输出数组之和top5的数组
可以通过以下代码实现:
```php
$arr = array(
array(1, 2, 3),
array(4, 5, 6),
array(7, 8, 9),
array(10, 11, 12),
array(13, 14, 15),
array(16, 17, 18),
array(19, 20, 21)
);
function cmp($a, $b) {
return array_sum($b) - array_sum($a);
}
usort($arr, "cmp");
$sum = 0;
$result = array();
foreach ($arr as $a) {
$sum += array_sum($a);
if (count($result) < 5) {
$result[] = $a;
}
}
echo "数组之和 Top5 的数组为:\n";
print_r($result);
echo "数组之和为:$sum\n";
```
代码中,首先定义了一个自定义比较函数 `cmp()`,用于按照数组之和进行排序。然后使用 `usort()` 函数对数组进行排序。最后,使用循环计算前五项数组之和,并将前五项数组存储到 `$result` 数组中。最后输出前五项数组及它们的和。
阅读全文