对于我是管理员的游戏,地图上传页面总是会抛出“你的上传出现错误,请再试一次”。错误。代码不是我写的,但我可以修复一些东西(所有的开发人员都找不到帮助解决问题的地方)。如果代码不是问题,我应该看什么来尝试和解决问题?谢谢!
页面代码:
<?php
if (!isset($_SESSION['User'])) // we don't want guests to upload maps
{
header("Location: /account");
exit(0);
}
// Handle map file upload
$errormessage = "";
if (isset($_FILES['mapfile']) and $_FILES['mapfile']['name'] != "")
{
if ($_FILES['mapfile']['error'] != 0 or $_FILES['mapfile']['type'] != "application/octet-stream" or $_FILES['mapfile']['size'] < 1 or $_FILES['mapfile']['size'] > 64000)
{
$errormessage = "There was an error with your upload. Please try again.";
} else
{
$_FILES['mapfile']['name'] = filter_var($_FILES['mapfile']['name'], FILTER_SANITIZE_STRING);
$_FILES['mapfile']['name'] = str_replace(" ", "_", $_FILES['mapfile']['name']);
$_FILES['mapfile']['name'] = str_replace("(", "", $_FILES['mapfile']['name']);
$_FILES['mapfile']['name'] = str_replace(")", "", $_FILES['mapfile']['name']);
if (strpos($_FILES['mapfile']['name'], "ACG") !== false or preg_filter("/[\d|\w|\.|\-|\(|\)]/i", "", $_FILES['mapfile']['name']) != "" or substr(strtolower($_FILES['mapfile']['name']), -4, 4) != ".map")
{
$errormessage = "Invalid map filename.";
} else
// if (file_exists("public/maps/".$_FILES['mapfile']['name']))
// {
// $errormessage = "Map filename already exists in filesystem.";
// } else
{
try
{
$map = new Map($_FILES['mapfile']['tmp_name']);
} catch (Exception $e)
{
$errormessage = "File is not a valid map: ".$e->getMessage();
}
}
if ($errormessage == "")
{
$mapquery = DB::selectArray("SELECT * FROM maps WHERE Mapfile='{$_FILES['mapfile']['name']}' LIMIT 1");
if (sizeof($mapquery) > 0) DB::query("DELETE FROM maps WHERE Mapfile='{$_FILES['mapfile']['name']}' LIMIT 1");
$newmap = [];
$newmap['Mapfile'] = $_FILES['mapfile']['name'];
$newmap['Mapname'] = $map->mapinfo['name'];
$newmap['Gamemode'] = $map->mapinfo['gamemode'];
$newmap['DescriptionRaw'] = $map->mapinfo['description'];
$newmap['Description'] = $map->generateDescription(str_replace(".map", "", $_FILES['mapfile']['name']));
$newmap['Numteams'] = $map->mapinfo['numteams'];
$newmap['Mapsize'] = $map->mapinfo['tilecount'];
$newmap['Flagcount'] = $map->mapinfo['neutralflags'] + $map->mapinfo['greenflags'] + $map->mapinfo['redflags'] + $map->mapinfo['blueflags'] + $map->mapinfo['yellowflags'];
$newmap['Switchcount'] = $map->mapinfo['switches'];
$newmap['Turretcount'] = $map->mapinfo['turrets'];
$newmap['Warpcount'] = $map->mapinfo['warps'];
$newmap['Views'] = 0;
$newmap['Downloads'] = 0;
$newmap['Votes'] = 0;
$newmap['LastPlayed'] = null;
if (DB::saveArray("maps", $newmap))
{
if (move_uploaded_file($_FILES['mapfile']['tmp_name'], "public/maps/".$_FILES['mapfile']['name']))
{
chmod("public/maps/".$_FILES['mapfile']['name'], 0755);
imagepng($map->createImage(), "public/maps/images/".str_ireplace(".map",".png",$_FILES['mapfile']['name']));
imagepng($map->createCroppedImage(), "public/maps/croppedimages/".str_ireplace(".map",".png",$_FILES['mapfile']['name']));
$errormessage = "Map successfully added to database.<br/><br/><a href='/maps/?map={$_FILES['mapfile']['name']}'>{$_FILES['mapfile']['name']}</a> ";
function getmaplist()
{
$maps = [];
$mapPaths = glob("public/maps/*.map");
foreach ($mapPaths as $map)
{
$map = basename($map);
$maps[$map] = substr($map, 0, -4);
}
sort($maps, SORT_NATURAL | SORT_FLAG_CASE);
return $maps;
};
Cache::put("list of maps", getmaplist());
} else
{
$errormessage = "Error uploading map file.";
}
} else
{
$errormessage = "Error adding map to database.";
}
}
}
}
?>
<?php require_once("pages/header.php"); ?>
<div id='mapuploadpage'>
<form action="/mapupload" method="POST" enctype="multipart/form-data">
<h1>Upload a Map</h1>
<input type="hidden" name="MAX_FILE_SIZE" value="64000" />
<input type="file" name="mapfile" id="mapfile" />
<input type="submit" name="upload" id="uploadbutton" value="Upload" />
<div id="uploadmessage"><?php echo $errormessage; ?></div>
</form>
</div>
<?php require_once("pages/footer.php"); ?>发布于 2021-05-23 03:40:58
正如您在代码中所看到的,
if ($_FILES['mapfile']['error'] != 0 or $_FILES['mapfile']['type'] != "application/octet-stream" or $_FILES['mapfile']['size'] < 1 or $_FILES['mapfile']['size'] > 64000)
{
$errormessage = "There was an error with your upload. Please try again.";
}这就是抛出错误的条件。基于这个条件,你可以一步一步地检查
$_FILES['mapfile']['error']application/octet-stream还是其中之一就是失败的原因。如果上传的文件是png/jpeg格式的图像文件,而不是application/octet-stream,那么最好也添加对这两种mime类型的检查
发布于 2021-05-23 03:16:29
检查服务器文件上传大小是否大于您尝试上传的大小!您可以在php.ini文件中检查这些设置
https://stackoverflow.com/questions/67653279
复制相似问题