上传多张返回false的图像

时间:2019-07-23 09:00:49

标签: php file-upload

尝试将多个图像上传到文件夹,请从下拉列表中进行选择。我设法使其完美工作,但突然间它停止工作。 move_uploaded_file()函数返回false。我不知道为什么。我使用echo打印出路径及其100%正确。我还检查了目标目录权限(设置为777)。

我不是php方面的专家,我遵循了多个教程和指南来提出以下代码。

<!DOCTYPE html>
<html lang="en" class="no-js">
    <head>
        <meta charset="UTF-8">
        <title>Welcome</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
        <link rel="stylesheet" type="text/css" href="css/component.css" />
        <link rel="icon" href="/MobileApp/Portal/favicon.png">
        <script>(function(e,t,n){var r=e.querySelectorAll("html")[0];r.className=r.className.replace(/(^|\s)no-js(\s|$)/,"$1js$2")})(document,window,0);</script>
        <style type="text/css">
            body{ font: 14px sans-serif; padding-left:15px; padding-top:15px; text-align: center;}
        </style>
    </head>
    <body>
    <?php 
    if(isset($_POST['submit']) & isset($_POST['s1'])){
        $choice = $_POST['s1'];
        $fixedPath = 'MobileApp/Images/';
        $slash = "/";

        // Count total files
        $countfiles = count($_FILES['file']['name']);

        // Looping all files
        for($i=0;$i<$countfiles;$i++){
            $filename = $_FILES['file']['name'][$i];
            $chosenPath = $fixedPath.$choice.$slash.$i;
            //$chosenPath = $fixedPath.$choice.$slash.$filename;
            echo $chosenPath;
            // Upload file
            if(move_uploaded_file($_FILES['file']['tmp_name'][$i], $chosenPath)){
                echo "Good"; 
            }
                else {
                    echo "bad";
                    echo $FILES['files']['error'];
                }

            //move_uploaded_file($_FILES['file'],$chosenPath/.$_FILES['tmp_name']);
        }
    } 
    else { 
        echo "Please choose a folder";
    }

    ?>

        <p>
        <legend>Files Upload</legend>
        <div class="box">

        <form method='post' action='' enctype='multipart/form-data' style="text-align: center">
            <input type="file" name="file[]" id="file" class="inputfile inputfile-1" data-multiple-caption="{count} files selected" multiple />
            <label for="file">
                <svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" viewBox="0 0 20 17">
                    <path d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z" />
                </svg>
                <span>Choose a file&hellip;</span>
            </label>
            </div>
            <input type='submit' name='submit' value='Upload' class="btn btn-warning" padding-top="15px" style="width:500px">
            <BR>
            <BR>
            <fieldset>
                <p>
                    <label>User's folder:</label>
                    <form method='post' action='' name='s1'>
                        <select name="s1" style="width:400px">
                            <option value="" selected="selected">-----</option>
                            <?php
            foreach(glob(dirname( dirname( dirname( __FILE__ ) ) ) . DIRECTORY_SEPARATOR . 'Images' . DIRECTORY_SEPARATOR . '*') as $filename){ 

            //foreach(glob(dirname(__FILE__) . '/MobileApp/Images/') as $filename){

            $filename = basename($filename);
            echo "<option value='" . $filename . "'>".$filename."</option>";
            }
            ?>
                        </select>
                    </form>
                </p>
            </fieldset>
        </form>
        </p>


    </body>
</html>

更新:

我已经对代码进行了一些调整,并将问题缩小到以下代码行:

move_uploaded_file($_FILES['file']['tmp_name'][i], $chosenPath)

但看不到我的问题。

1 个答案:

答案 0 :(得分:0)

我认为这里唯一需要更改的地方

$chosenPath = $fixedPath.$choice.$slash.$filename;

代替

$chosenPath = $fixedPath.$choice.$slash.$i;

move_uploaded_file的第二个参数应该是目标文件名。只有那一种改变对我有用。

您还需要提供root目录中的目标目录路径,这意味着 $fixedPath = 'MobileApp/Images/'; 应该是来自根目录的路径,例如 /var/www/html/../../MobileApp/Images/ (这只是您的实际目录路径可以不同的一个示例),请选中此link以查找目标目录的相对路径