You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:06:00