PHP 消息:PHP 致命错误:未捕获类型错误:无法访问字符串上字符串类型的偏移量

Ome*_*xlu 21 php string nginx typeerror offset

我收到以下错误:

\n
PHP message: PHP Fatal error: Uncaught TypeError: Cannot access offset of type string on string\n
Run Code Online (Sandbox Code Playgroud)\n

在这一行:

\n
if ($uploadZoneData[1]['size'] != 0) {\n
Run Code Online (Sandbox Code Playgroud)\n

在 php 7.4 上我有任何麻烦,但在 php 8 上我有。

\n

可能是什么问题?

\n

编辑:相关功能的完整代码:

\n
function uploadSingleFile($zoneImage, $fileMoveTo, $fileAllowedExtensions, $fileAllowedSize, $zoneCustomer, $zone)\n{\n    global $config;\n\n    // define file upload settings\n    $errors = array();\n    $fileName = $zoneImage['name'];\n    $fileSize = $zoneImage['size'];\n    $fileTmp = $zoneImage['tmp_name'];\n    $fileType = $zoneImage['type'];\n    $fileExt = strtolower(end(explode('.', $zoneImage['name'])));\n    $MBtoByte = $fileAllowedSize * 1048576;\n    $extensions= $fileAllowedExtensions;\n\n    // define errors\n    if (in_array($fileExt, $extensions) === false) {\n        $errors[] = "Dieser Datei-Typ ist nicht erlaubt";\n    }\n\n    if ($fileSize > $MBtoByte) {\n        $errors[] = 'Die Datei ist zu gross';\n    }\n\n    // finally try to upload the file\n    if (empty($errors) == true) {\n        $temp = explode(".", $zoneImage["name"]);\n        $newfilename = $zoneCustomer . '-' . strtoupper($zone) . '-' . uniqid() . '.' . end($temp);\n\n        move_uploaded_file($fileTmp, $_SERVER["DOCUMENT_ROOT"] . $fileMoveTo . $newfilename);\n        $status = '1';\n    } else {\n        $status = '0';\n    }\n\n    // build array of the different outputs\n    $uploadStatus = array($status, $newfilename, $errors);\n\n    return $uploadStatus;\n}\n\nfunction updateZoneData($zoneFile, $zoneCustomer, $zone, $zoneLink, $maxWidth, $bannerID)\n{\n    global $db;\n\n    // get customer values\n    $getCustomerValues = getColumnValue('customers', "WHERE `customerNr` = '" . $zoneCustomer . "'");\n\n    // define redirect url\n    switch ($zone) {\n      case "a1":\n        $redirectZone = "zones.php#zones-overview-a1-overview";\n      break;\n      case "a2":\n        $redirectZone = "zones.php#zones-overview-a2-overview";\n      break;\n      case "b1":\n        $redirectZone = "zones.php#zones-overview-b1-overview";\n      break;\n      case "b2":\n        $redirectZone = "zones.php#zones-overview-b2-overview";\n      break;\n      case "b3":\n        $redirectZone = "zones.php#zones-overview-b3-overview";\n      break;\n      case "b4":\n        $redirectZone = "zones.php#zones-overview-b4-overview";\n      break;\n      case "a9":\n        $redirectZone = "zones.php#zones-overview-a9-overview";\n      break;\n      case "a9-1":\n        $redirectZone = "zones.php#zones-overview-a9-1-overview";\n      break;\n      case "a11":\n        $redirectZone = "zones.php#zones-overview-a11-overview";\n      break;\n      default:\n        $redirectZone = "zones.php";\n      }\n\n    // upload file to the server\n    $uploadZoneData = uploadSingleFile($zoneFile, '/adserver/banners/', array("jpg", "jpeg", "png", "gif"), '3', $zoneCustomer, $zone);\n\n    if ($uploadZoneData[1]['size'] != 0) {\n        if ($uploadZoneData[0] == '1') {\n\n            // create ZIP-Backup (zone-banners) from '/adserver/banners' to '/cp/includes/files/zip-backups'\n            createZipBackup('/adserver/banners', '/cp/includes/files/zip-backups', 'adserver-banners.zip');\n\n            // get zone values & delete old bannerImg from file-system\n            $getZoneDeleteValues = getColumnValue('zones', "WHERE `customerNr` = '" . $zoneCustomer . "' AND `zone` = '" . $zone . "' AND `id` = '" . $bannerID . "'");\n            unlink($_SERVER["DOCUMENT_ROOT"] . '/adserver/banners/' . $getZoneDeleteValues['0']['bannerImg']);\n\n            // execute action\n            $updateZoneData = $db->update("zones", [\n                                                   "customerNr" => $zoneCustomer,\n                                                   "customer" => $getCustomerValues['0']['customer'],\n                                                   "zone" => $zone,\n                                                   "bannerImg" => $uploadZoneData[1],\n                                                   "bannerLink" => $zoneLink,\n                                                   "maxWidth" => $maxWidth,\n                                                   "changeDate" => date("Y-m-d H:i:s")\n                                                   ], [\n                                                      "id" => $bannerID\n                                                      ]);\n\n            redirectTo($redirectZone, 1, "\xc2\xab " . strtoupper($zone) . "-Banner (" . $getCustomerValues['0']['customer'] . " [K. N\xc2\xb0: " . $zoneCustomer . "]) \xc2\xbb wurde erfolgreich aktualisiert.", 'ZONES');\n        } else {\n\n        // collect and save errors (file-upload)\n            $collectedErrors = array_flatten($uploadZoneData[2]);\n            setcookie("collectedErrors", '1', time() + (1 * 5), "/"); // expire in 5 seconds\n            $_SESSION["collectedErrors"] = $collectedErrors;\n\n            redirectTo($redirectZone, 0, "\xc2\xab " . strtoupper($zone) . "-Banner (" . $getCustomerValues['0']['customer'] . " [K. N\xc2\xb0: " . $zoneCustomer . "]) \xc2\xbb konnte nicht aktualisiert werden.", 'ZONES');\n        }\n    } else {\n\n        // execute action\n        $updateZoneData = $db->update("zones", [\n                                               "customerNr" => $zoneCustomer,\n                                               "customer" => $getCustomerValues['0']['customer'],\n                                               "zone" => $zone,\n                                               "bannerLink" => $zoneLink,\n                                               "maxWidth" => $maxWidth,\n                                               "changeDate" => date("Y-m-d H:i:s")\n                                               ], [\n                                                  "id" => $bannerID\n                                                  ]);\n\n        redirectTo($redirectZone, 1, "\xc2\xab " . strtoupper($zone) . "-Banner (" . $getCustomerValues['0']['customer'] . " [K. N\xc2\xb0: " . $zoneCustomer . "]) \xc2\xbb wurde erfolgreich aktualisiert.", 'ZONES');\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

小智 19

首先,欢迎来到 Stack Overflow!

此错误意味着您正在尝试访问字符串的索引 [1]['size'],该索引无效。请务必检查uploadSingleFile(...)返回的是数组而不是字符串。

我检查了您的代码,发现 uploadSingleFile 返回的数组具有以下三项:

$uploadStatus = array($status, $newfilename, $errors);
Run Code Online (Sandbox Code Playgroud)

$newfilename不是一个数组。它是一个字符串,正如您在此处定义的那样:

$newfilename = $zoneCustomer . '-' . strtoupper($zone) . '-' . uniqid() . '.' . end($temp);
Run Code Online (Sandbox Code Playgroud)