如何修复PHP表单重定向以将文件上传到服务器

时间:2019-04-28 16:25:57

标签: javascript php

请帮助。我正在尝试使用php和javascript创建拖放文件上传器,但是当我单击上传文件时,php文件显示以下错误: 此页面无法正常运行localhost当前无法处理此请求。 HTTP错误500

这是我的html的正文。

<body>
        <div class="wrapper">
            <div class="upload-console">
                <h2 class="upload-console-header">Upload</h2>

                <div class="upload-console-body">
                    <h3>Select files from your computer</h3>
                    <form action="upload.php" method="post" enctype="multipart/form-data">
                        <input type="file" name="files[]" id="standard-upload-files" multiple>
                        <input type="submit" value="Upload files" id="standard-upload">
                    </form>

                    <h3>Or drag and drop files below</h3>
                    <div class="upload-console-drop" id="drop-zone">
                        Just drag and drop files here
                    </div>

                    <div class="bar">
                        <div class="bar-fill" id="bar-fill">
                            <div class="bar-fill-text" id="bar-fill-text"></div>
                        </div>
                    </div>

                    <div id="uploads-finished" class="hidden">
                        <h3>Processed files</h3>
                    </div>      
                </div>
            </div>
        </div>
        <script src="js/upload.js"></script>
        <script src="js/global.js"></script>
    </body>

这是我的upload.php文件。

<?php
    header('Content-Type: application/json');

    $allowed = ['mp4','png','jpg'];
    $processed = [];

    foreach($_FILES['files']['name'] as $key => $name) {
        if($_FILES['files']['error'][$key] === 0) {

            $temp = $_FILES['files']['tmp_name'][$key];

            $ext = explode('.',$name);
            $ext = strtolower(end($ext));

            $file = uniqid('',true) . time() . '.' . $ext;

            if(in_array($ext, $allowed) && move_uploaded_file($temp, 'uploads/' . $file)) {
                $processed[] = array(
                    'name' => $name,
                    'file' => $file,
                    'uploaded' => true
                );
            } else {
                $processed[] = array(
                    'name' => $name,
                    'uploaded' => false
                );
            }
        }
    } 
    echo json_encoded($processed);
?>

这是运行树命令的结果

.
├── css
│   └── global.css
├── index.html
├── js
│   ├── global.js
│   └── upload.js
├── phpinfo.php
├── upload.php
└── uploads
    ├── 5cc57ea6322ba7.448603261556446886.jpg
    ├── 5cc58390d82095.937935921556448144.jpg
    ├── 5cc583f48b4a81.475000611556448244.jpg
    ├── 5cc596bb0b2980.525819171556453051.jpg
    ├── 5cc5ca069f34e8.919505521556466182.jpg
    └── 5cc5ccc7525ad4.537311361556466887.jpg

图像似乎正在上传,但是出现500错误页面。 我正在尝试使其获得进度条以显示进度,并更改隐藏的类以显示下载的文件。但是它重定向到uploads.php,错误为500。谢谢。

here上都可以在codepen上看到所有的html和js。

2 个答案:

答案 0 :(得分:0)

您的表单将重定向到其中的“操作”,在您的情况下为upload.php-如果要停止重定向,则需要添加php重定向: header("Location: mypage.php");,以便返回上一页。

如果页面是动态的,并且您不知道mypage.php是什么,请在表单中添加隐藏的输入,然后使用页面名称作为此值。

编辑:抱歉,这仍然不能解决您的问题-上面的重定向将用于执行脚本时。 500错误是由于代码中的错误所致。此错误(如@Chris White在您的评论中提到的) 是echo json_encoded($processed); 这应该是 echo json_encode($processed);

答案 1 :(得分:0)

用json_encode替换json_encoded 编辑:刚意识到有人已经回答了..我的建议是使用某种IDE,我在不到一秒钟的时间内发现了它。 IDE高亮语法错误