将文件放入正确文件夹的问题


Issues putting files into the correct folder

我刚刚有另一个问题要遵循:将PHP数组添加到MySQL中

我试图把文件放入不同的文件夹取决于扩展名。但是,无论输出数组时显示的是什么,文件最终都会在具有相同文件名的同一文件夹中。

这是我现在的数组:

$files[$key] = array
(
    $file_name = basename($guid." - ".$_FILES['file']['name'][$key]),
    $file_type = $_FILES['file']['type'][$key],
    $file_size = $_FILES['file']['size'][$key],
    $file_tmp = $_FILES['file']['tmp_name'][$key],
    $extension = strtolower(substr($file_name, strlen($file_name)-4, strlen($file_name))),
    $tgt = $_FILES['file']['name'][$key]
);

这是我现在的数组输出:

Array
(
[0] => Array
    (
        [0] => 966c5853-63b4-4570-a3ee-bd5629688038 - cycles.pdf
        [1] => application/pdf
        [2] => 331881
        [3] => C:'xampp'tmp'php9738.tmp
        [4] => .pdf
        [5] => cycles.pdf
    )
[1] => Array
    (
        [0] => 966c5853-63b4-4570-a3ee-bd5629688038 - landofstoopid.bmp
        [1] => image/bmp
        [2] => 310342
        [3] => C:'xampp'tmp'php9758.tmp
        [4] => .bmp
        [5] => landofstoopid.bmp
    )

)

这是我生成的SQL查询:

$new = array();
foreach($files as $key => $value)
{
    $new[] = "'".implode("','", $value)."', '$guid', '$getthedate', '$gettime', '$mailid', '$target'";
}
$query = "(".implode("), (",$new).")";

这是SQL查询

的输出
INSERT INTO files (filename, filetype, filesize, filetempname, guid, dateadded, timeadded, mailid, target) 
VALUES ('966c5853-63b4-4570-a3ee-bd5629688038 - cycles.pdf','application/pdf','331881','C:'xampp'tmp'php9738.tmp','.pdf','cycles.pdf', '966c5853-63b4-4570-a3ee-bd5629688038', '13 Jun 2013', '10:25:07', '77', 'files/pics/landofstoopid.bmp'), 
('966c5853-63b4-4570-a3ee-bd5629688038 - landofstoopid.bmp','image/bmp','310342','C:'xampp'tmp'php9758.tmp','.bmp','landofstoopid.bmp', '966c5853-63b4-4570-a3ee-bd5629688038', '13 Jun 2013', '10:25:07', '77', 'files/pics/landofstoopid.bmp')

这就是我要确定文件应该放置的位置

$pics = array(".bmp", ".gif", ".jpg", "jpeg", ".png"); //5              
$docs = array(".doc", "docx", ".odt", ".pdf", ".ppt", "pptx", ".rtf", ".txt", ".xls", "xlsx"); //10             
$misc = array(".csv", ".htm", "html", ".php", ".pkt", ".rar", ".sql", ".xpi", ".zip"); //9
if (in_array($extension,$pics))
{
    $target = "".FILES."/".FUP_PICS."/";
}
else if (in_array($extension,$docs))
{
    $target = "".FILES."/".FUP_DOCS."/";
}
else if (in_array($extension,$misc))
{
    $target = "".FILES."/".FUP_MISC."/";
}
$target = $target.$tgt;

我已经在foreach循环内尝试了这两种方法,以获得多个文件的值,并在它之外,它以相同的方式结束。

文件的目标总是根据最后一个文件名和扩展名确定的。如上所述,我有一个pdf文件和一个bmp文件,pdf文件应该放在docs文件夹中,bmp文件应该放在pics文件夹中。但是,两个文件都被发送到pics文件夹,并且名称更改为数组中的最后一个文件。

只是想知道我是否可以得到一些关于我在哪里出错的指针,或者如果这甚至是可能的。

我要补充的是,当文件作为单个文件上传时,这个问题不会发生,文件会进入正确的文件夹。

Thanks in advance

选择将文件放入哪个文件夹的代码可以工作,尽管您可能应该为未识别的扩展设置默认操作。

既然这里一切似乎都井然有序,很可能问题出在别处。

您的sql结构使我怀疑您在sql生成代码迭代之间没有更改目标。您确定变量名拼写正确吗?是否总是使用最后一个文件的扩展名和名称?在我看来,这是一个保留变量的问题。

考虑删除代码以确定文件的存放位置,并将其替换为函数vis:

function set_target($extension)
    {
    $target="";
    $pics = array(".bmp", ".gif", ".jpg", "jpeg", ".png"); //5              
    $docs = array(".doc", "docx", ".odt", ".pdf", ".ppt", "pptx", ".rtf", ".txt", ".xls", "xlsx"); //10             
    $misc = array(".csv", ".htm", "html", ".php", ".pkt", ".rar", ".sql", ".xpi", ".zip"); //9
    if (in_array($extension,$pics))
        {
        $target = "".FILES."/".FUP_PICS."/";
        }
        else if (in_array($extension,$docs))
        {
        $target = "".FILES."/".FUP_DOCS."/";
        }
        else if (in_array($extension,$misc))
        {
        $target = "".FILES."/".FUP_MISC."/";
        }
    $target = $target.$tgt;
    echo $target."<BR>"; //this line for debugging - should see as many lines as you have files.  If not, the problem is in your iteration loop.
    return($target);
    }

代替内联代码。这可能有助于揭示目标没有被正确分配的地方,无论如何,这是一个很好的实践。

或者,不要尝试执行单个SQL查询,而只是为每个文件生成一个新的SQL。

如果您提供其余的代码,您可能能够得到一个更完整的答案,但我的猜测是,这将解决它。生成sql的位将是有用的。