添加函数时上载文件不起作用


Upload file not working when I add a function

此代码将文件上载到某个目录。现在我想添加文件名检查器以避免覆盖
我创建了一个函数,如果文件名重复,则返回randomString_filename,如果不存在重复,则也返回确切的文件名。这是用PHP编写的函数:

function rnmFile($dir,$flname){
    foreach (glob("$dir*.*") as $filename) {
        if ($filename == $flname){
            $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            $randomString = '';
            for ($i = 0; $i < 10; $i++) {
                $randomString .= $characters[rand(0, strlen($characters) - 1)];
            }
            return $randomString.'_'.$flname;
        }
        else {
            return $flname;
        }
    }
}

这是文件上传代码:

session_start();
$table_name = $_SESSION['un'];
if (!is_dir($table_name)) {
    mkdir($table_name);
}
$output_dir = $table_name . '/';
if(isset($_FILES["myfile"]))
{
    $ret = array();
    $error =$_FILES["myfile"]["error"];
    {
        if(!is_array($_FILES["myfile"]['name'])) //single file
        {
            $fileName = $_FILES["myfile"]["name"];
            move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.$fileName);
            echo "<br> Error: ".$_FILES["myfile"]["error"];
            $ret[$fileName]= $output_dir.$fileName;
        }
        else
        {
            $fileCount = count($_FILES["myfile"]['name']);
            for($i=0; $i < $fileCount; $i++)
            {
                $fileName = $_FILES["myfile"]["name"][$i];
                $ret[$fileName]= $output_dir.$fileName;
                move_uploaded_file($_FILES["myfile"]["tmp_name"][$i],$output_dir.$fileName );
            }
        }
    }
    echo json_encode($ret);

每当我添加该功能时,文件上传似乎不起作用,我不知道为什么
这就是我如何将函数添加到代码中:

move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.rnmFile($output_dir,$fileName));
$ret[$fileName]= $output_dir.rnmFile($output_dir,$fileName);

并适用于其余部分。顺便说一句,这是访问文件上传的代码

<div id="content">
    <div id="mulitplefileuploader">Upload!</div>
    <div id="status"></div>
    <script>
        $(document).ready(function()
        {
            var settings = {
                url: "upload_logic.php",
                method: "POST",
                allowedTypes:"jpg,png,gif,doc,pdf,zip",
                fileName: "myfile",
                multiple: true,
                onSuccess:function(files,data,xhr)
                {
                    $("#status").html("<font color='green'>Upload is success</font>");
                },
                onError: function(files,status,errMsg)
                {
                    $("#status").html("<font color='red'>Upload is Failed</font>");
                }
            }
            $("#mulitplefileuploader").uploadFile(settings);
        });
    </script>
</div>

它还使用jQuery上传插件

好的,我来回答我自己的问题。jquery.uploadfile.min.js也访问变量$fileName,所以我利用了它并将其用作我的变量。我还删除了一些无用的代码,并用file_exsist()替换了glob()函数。这是目前正在运行的代码

<?php
session_start();
$table_name = $_SESSION['un'];
if (!is_dir($table_name)) {
    mkdir($table_name);
}
$output_dir = $table_name . '/';
if(isset($_FILES["myfile"]))
{
    function rnmFile($dir,$flname){
            if (file_exists($dir.$flname)){
                $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
                $randomString = '';
                for ($i = 0; $i < 15; $i++) {
                    $randomString .= $characters[rand(0, strlen($characters) - 1)];
                }
                return $randomString.'_'.$flname;
            }
            else {
                return $flname;
            }
        }
    }
            $fileName = rnmFile($output_dir,$_FILES["myfile"]["name"]);
            move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.''.$fileName);
?>