PHP8.0.11解密二进制文件时count()参数为int类型报错求助
问题原因
你的代码核心错误是在解密的else分支中,误将整个数组变量$dec_arr直接赋值为整数,覆盖了原有的数组结构,导致后续循环执行count($dec_arr)时传入的是整数而非数组,触发PHP 8.0+的强类型校验报错,同时后续访问数组下标也会触发警告,该问题和XAMPP环境、强制类型转换无关。
修复后完整代码
<?php if(count($_POST)>0) { $ciper = array(5, -14, 31, -9, 3); $dec_arr = []; $ind = 0; $handle = fopen("secret.txt", "r"); if ($handle) { while (!feof($handle)) { $hex = bin2hex(fread ($handle , 1 )); $dec_arr[$ind] = hexdec($hex); $ind++; } fclose($handle); } unset($dec_arr[(count($dec_arr)-1)]); $raw_data = ""; for($i = 0, $k = 0; $i < count($dec_arr); $i++) { if($dec_arr[$i]==10) { $dec_arr[$i] = 59; $k = 0; } else { // 仅修改数组对应下标的值,不要覆盖整个$dec_arr数组 $dec_arr[$i] = ((($dec_arr[$i] + 256) - $ciper[$k])%256); } $raw_data .= chr($dec_arr[$i]); $k = (($k+1)%5); } } ?>
核心修改说明
- 原错误代码行
$dec_arr = ((($dec_arr[$i] + 256) - $ciper[$k])%256);缺少下标标识,直接把整个数组替换为了计算出来的整数值 - 修改为
$dec_arr[$i] = ((($dec_arr[$i] + 256) - $ciper[$k])%256);后,仅更新数组对应索引位置的数值,保留$dec_arr的数组类型
内容的提问来源于stack exchange,提问作者danielbres
相关产品推荐
相关产品推荐

