无法从不同目录上传文件

时间:2015-01-20 17:28:20

标签: php html zip archive

file.php - 这是一个html代码,允许用户选择多个文件进行上传。

<html>  
<head>
    <meta charset="utf-8">
    <title></title>  
</head>  
<body>  
    <form method="post" enctype="multipart/form-data"  action="file2.php">  
        <input type="file" name="zipfile[]" multiple />  
        <br /><br />
        <button type="submit">Upload selected files</button>  
    </form>  
</body>  
</html>

file2.php - 这里我尝试压缩上传前选择的多个文件,问题是我从当前工作目录中选择要上传的文件,文件并压缩和上传。但是当我从当前工作目录以外的其他目录中选择文件时,文件不会被压缩和上传。这就是问题。

    <? $zeep = new ZipArchive;
$fyle = Array();
$zeep->open('zip/try.zip',  ZipArchive::CREATE);
foreach($_FILES['zipfile']['tmp_name'] as $fyl) {
    foreach($_FILES['zipfile']['name'] as $fyle) {

    echo $fyle;
    $zeep->addFile($fyl,$fyle);
    echo "<br/>";
}
}
$zeep->close();
?>

1 个答案:

答案 0 :(得分:0)

在上传文件列表中,['name']是从浏览器发送的文件名 - 它通常是远程用户计算机上的文件名。这适用于当前目录中的文件的原因是您的服务器能够看到相同的原始文件(它不是使用上传的数据)。

您需要添加到zip文件的文件是已上传到服务器的文件,其位置存储在['tmp_name']中。

来自手册页的评论:

[name] => MyFile.txt 
(comes from the browser, so treat as tainted)

[tmp_name] => /tmp/php/php1h4j1o 
(could be anywhere on your system, depending on your config settings, 
but the user has no control, so this isn't tainted)

编辑: 我无论如何都不是PHP专家,但我认为以下内容可行:

<? $zeep = new ZipArchive;
$fyle = Array();
$zeep->open('zip/try.zip',  ZipArchive::CREATE);
foreach($_FILES['zipfile'] as $fyle) {

    echo $fyle['name'];
    $zeep->addFile($fyle['tmp_name'], $fyle['name']);
    echo "<br/>";
}
$zeep->close(); ?>

这是做什么的,使用tmp_name作为要添加到zip文件的文件,但指定裸name作为zip文件中使用的名称,否则你就是&#d; dd最终得到档案中的完整临时路径。