在 for 循环内的 PHP 数组中未正确索引项目

Item not being properly indexed in PHP array inside of for loop

我有一个 for 循环,它使用 PHP 的 IMAP 函数从电子邮件中提取附件。这适用于一个附件,但无法从一封邮件中提取多个附件。请参阅下面的代码 -

for ($i = 0; $i < $count; $i++) {
  $attachments[$i] = array( 'is_attachment' => FALSE );
  if ($email['structure']->parts[$i]->ifdparameters) {
    foreach ($email['structure']->parts[$i]->dparameters as $object) {
      if (strtolower($object->attribute) == 'filename') {
        $attachments[$i]['is_attachment'] = TRUE;
        $attachments[$i]['filename'] = $object->value;
      }
    }
  }
  if ($email['structure']->parts[$i]->ifparameters) {
    foreach ($email['structure']->parts[$i]->parameters as $object) {
      if (strtolower($object->attribute) == 'name') {
        $attachments[$i]['is_attachment'] = TRUE;
        $attachments[$i]['name'] = $object->value;
      }
    }
  }
  if ($attachments[$i]['is_attachment']) {
    $attachments[$i]['attachment'] = imap_fetchbody($this->conn, $email['index'], $i+1);     
    $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);                       
  }
  error_log(print_r($attachments[$i], TRUE));
  error_log(print_r($attachments, TRUE));
}

第二个附件似乎没有正确添加到数组的索引中。我的错误日志显示每个值 (0, 1, 2) 的 $attachment[$i] 值,但是,$attachment 仅包含 2 个索引 (0, 1)。第一个是空白值(电子邮件的一部分),第二个和第三个是附件。请参阅下面的示例错误日志输出 -

[13-Jun-2015 16:19:54 Europe/Berlin] Array ( [is_attachment] => )
[13-Jun-2015 16:19:54 Europe/Berlin] Array ( [0] => Array ([is_attachment] => ))
[13-Jun-2015 16:19:55 Europe/Berlin] Array (
  [is_attachment] => 1
  [filename] => 2015-06-12_1048.png
  [name] => 2015-06-12_1048.png
  [attachment] => ‰PNG
[13-Jun-2015 16:19:55 Europe/Berlin] Array ( 
  [0] => Array ( [is_attachment] => )
  [1] => Array  (
    [is_attachment] => 1
    [filename] => 2015-06-12_1048.png
    [name] => 2015-06-12_1048.png
    [attachment] => ‰PNG
[13-Jun-2015 16:19:55 Europe/Berlin] Array (
  [is_attachment] => 1
  [filename] => 5812548c-d445-4a18-a56d-e2698fdfd99b.jpg
  [name] => 5812548c-d445-4a18-a56d-e2698fdfd99b.jpg
  [attachment] => ÿØÿà
[13-Jun-2015 16:19:55 Europe/Berlin] Array ( 
  [0] => Array ( [is_attachment] => )
  [1] => Array (
    [is_attachment] => 1
    [filename] => 2015-06-12_1048.png
    [name] => 2015-06-12_1048.png
    [attachment] => ‰PNG

如您所见,第三项 $attachments[2] 是一个数组 [attachment] => ÿØÿà,但是当我打印 $attachments 时它并没有添加到数组中。我真的很困惑为什么它在打印 $attachments[$i] 而不是 $attachments 时显示。有什么想法吗?

更新:由于二进制文件 + 可能为空字符,错误记录被破坏。问题仍然存在,但我无法拉出多个附件。我将 $attachments 数组中的二进制文件保存到磁盘,但只保存了一个附件,而不是两个。为什么只保存第一个二进制文件?

好吧,那我把这个作为答案发布,所以这个问题可以标记为已回答:

这似乎是一个纯粹的视觉错误。
您提供的错误日志似乎不完整,任何 [attachment] => 之后的所有输出似乎都被切断了(至少应该有右括号来关闭 Array ( ...,对吧?)。
这很可能是由

引起的
  1. 那些包含空字符 ([=12=]) 的文件,这很可能是特定长度的二进制文件。
  2. 错误处理程序不使用字节数组,而是使用 C 风格的字符串,其结尾由所述空字符指示。

所以当记录数据时,它似乎被破坏了,而实际上,它很好。