首页 > 解决方案 > 预期类型“可迭代|对象”。找到“字符串”但不明白为什么

问题描述

我正在尝试从 php 中的图像中读取所有 exif 数据,将其转换为更易于访问的形式并将其存储在 MariaDB 中的图像条目中。数据库中已经有现有图像的记录,但没有 exif 数据,所以我使用非常相似的代码编写了一个一次性过程。那工作得很好。

我现在尝试实现的具体逻辑是在上传新图像时提取 exif。

现在我遇到了一个我不明白原因的语法错误:预期类型'iterable|object'。找到“字符串”

当然foreach需要一个可迭代的,但是为什么在这里它会$headers[$section]被视为一个字符串呢?

整天都在尝试解决这个问题,将它与有效的代码和来自https://www.php.net/manual/en/function.exif-read-data.php的示例数据进行比较,但仍然卡住了。谢谢你的帮助。

<?php

$file = '../uploads/60db4bd52107d5.12775787_1624984533.jpg';
$fp = fopen($file, 'rb');

if (!$fp) {
    $error = 'Error: Unable to open image for reading';
    exit;
}

// Attempt to read the exif headers
$headers = exif_read_data($fp, 0, true);
print_r ($headers);                        // <<<<<< shows exif OK

if ($headers = "") {
    echo 'No exif headers';
    exit;
}

$sections = [ "COMPUTED", "FILE", "IFD0", "THUMBNAIL", "EXIF", "INTEROP" ]; // for exif extraction

$exifAll = "{";
foreach ($sections as $section) {
    $exifAll .= '"' . $section . '":{';
    foreach ($headers[$section] as $header => $value) {
//  >>>>>>>? ~~~~~~~~~~~~~~~~~~  <<<<<<< Expected type 'iterable|object'. Found 'string'
        $exifAll .= '"' . $header . '":"' . $value . '",';
    }
    $exifAll .= '},';
}

标签: phpsyntax

解决方案


推荐阅读