0
if(isset($_POST['submit'])){
if(!empty($_FILES['files']['name'])){
  $Zip = new ZipArchive();
  $Zip->open('uploads.zip', ZIPARCHIVE::CREATE);
  $UploadFolder = "uploads/";
  foreach($_FILES['files'] as $file){
        $Zip->addFile($UploadFolder.$file);
  }
  $Zip->close();
}
 else {
     echo "no files selected";
}
}

这里有什么问题?我刚刚看了一个创建档案并在其中添加文件的教程,但它不起作用......我正在使用 php 5.4 。它甚至没有给我任何错误。谁能指导我在这里做错了什么。

下面是表格

<form action="" method="POST" enctype="multipart/form-data">
            <label>Select files to upload</label>
            <input type="file" name="files">
            <input type="submit" name="submit" value="Add to archieve">
        </form>
4

1 回答 1

1

这些行没有任何意义

$UploadFolder = "uploads/";
foreach($_FILES['files'] as $file){
    $Zip->addFile($UploadFolder.$file);
}

在您发布的代码中,没有上传的文件被移动到uploads/目录中,并且循环通过$_FILES["files"]元素 - 这是各种值的关联数组,其中只有一个是实际文件名 - 并将每个值添加到ZIP 作为一个文件,是无意义的。- 您应该阅读与文件上传相关的 PHP 文档。很明显你还不知道 PHP 如何处理文件上传,在尝试这样的事情之前你应该学习。

一种解决方案是使用 将上传的文件移动到uploads/目录move_uploaded_file,但是看到您只是真正使用那里的文件将其添加到存档中,该步骤非常多余;您可以直接从临时位置添加它。不过,首先您需要验证它,您可以使用该is_uploaded_file功能来完成。

// Make sure the file is valid. (Security!)
if (is_uploaded_file($_FILES["files"]["tmp_name"])) {
    // Add the file to the archive directly from it's
    // temporary location. Pass the real name of the file
    // as the second param, or the temporary name will be
    // the one used inside the archive.
    $Zip->addFile($_FILES["files"]["tmp_name"], $_FILES["files"]["name"]);

    $Zip->close();

    // Remove the temporary file. Always a good move when
    // uploaded files are not moved to a new location.
    // Make sure this happens AFTER the archive is closed.
    unlink($_FILES["files"]["tmp_name"]);
}
于 2013-09-09T02:25:14.223 回答