Ome*_*xlu 21 php string nginx typeerror offset
我收到以下错误:
\nPHP message: PHP Fatal error: Uncaught TypeError: Cannot access offset of type string on string\nRun Code Online (Sandbox Code Playgroud)\n在这一行:
\nif ($uploadZoneData[1]['size'] != 0) {\nRun Code Online (Sandbox Code Playgroud)\n在 php 7.4 上我有任何麻烦,但在 php 8 上我有。
\n可能是什么问题?
\n编辑:相关功能的完整代码:
\nfunction 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}\nRun 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)