php - PHP 致命错误:未捕获类型错误:count():参数 #1 ($value) 必须是 Countable|array 类型,给定 int
问题描述
在本地尝试使用给定的密码解密二进制文件。数据以十六进制的 0A 分隔。在解密阶段,我的数组就像一个 int,我不知道为什么。有合适的解决方案吗?
php版本:8.0.11
试图重新安装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++)//Warning: Trying to access array offset on value of type int { if($dec_arr[$i]==10) { $dec_arr[$i] = 59; $k = 0; } else { $dec_arr = ((($dec_arr[$i] + 256) - $ciper[$k])%256);//Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, int given } $raw_data .= chr($dec_arr[$i]); $k = (($k+1)%5); } }?>
解决方案
就像@aynber 提到的那样,您正在为 $dev_arr 分配一个 int 值。你的线应该是
$dec_arr[$i] = ((($dec_arr[$i] + 256) - $ciper[$k])%256);
你也可以更换
unset($dec_arr[(count($dec_arr)-1)]);
和
array_pop($dec_arr);
推荐阅读
- sql - 列出数量最多的不同行
- java - 按特定逻辑合并 ArrayList of Integers
- elasticsearch - 在 Elastic Search 中匹配确切值的查询是什么?
- azure - 为 Azure Function App (Terraform) 配置应用程序结构
- html - 具有固定大小和文本换行的 Html 表格
- php - 每次提交时将 PHP 表单保存到单独的 XML
- javascript - 可以在浏览器中使用节点模块吗?
- azure - (Azure 逻辑应用)Webhook 是否支持基于托管标识的身份验证?
- java - 如何使用 AssertJ 检查某个列表是否仅包含一个特定元素或为空
- ios - Swift:将 MKPolygon 转换为 UIBeizerpath 并在 UIView 上绘制路径