首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个.php是不是过时了,导致我的页面抛出错误?

这个.php是不是过时了,导致我的页面抛出错误?
EN

Stack Overflow用户
提问于 2021-05-23 03:08:23
回答 2查看 27关注 0票数 0

对于我是管理员的游戏,地图上传页面总是会抛出“你的上传出现错误,请再试一次”。错误。代码不是我写的,但我可以修复一些东西(所有的开发人员都找不到帮助解决问题的地方)。如果代码不是问题,我应该看什么来尝试和解决问题?谢谢!

页面代码:

代码语言:javascript
运行
复制
<?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"); ?>
EN

回答 2

Stack Overflow用户

发布于 2021-05-23 03:40:58

正如您在代码中所看到的,

代码语言:javascript
运行
复制
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.";
}

这就是抛出错误的条件。基于这个条件,你可以一步一步地检查

  1. $_FILES['mapfile']['error']
  2. Is的值是什么要上传的地图文件的类型是application/octet-stream还是
  3. 上传的地图文件大小

其中之一就是失败的原因。如果上传的文件是png/jpeg格式的图像文件,而不是application/octet-stream,那么最好也添加对这两种mime类型的检查

票数 1
EN

Stack Overflow用户

发布于 2021-05-23 03:16:29

检查服务器文件上传大小是否大于您尝试上传的大小!您可以在php.ini文件中检查这些设置

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67653279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档