首页 > 解决方案 > 我的 PHP 脚本不想创建 ZIP 文件

问题描述

我试图编写一个脚本,将一些数据放在一个 zip 文件中。我想我做得很好,但他没有创建 zip 文件。

我已经尝试了很多,但没有发现问题。

<?php
$sql_abfrage_cloud = "SELECT * FROM dateien WHERE code = '$zugang' ORDER BY id"; 
$abfrage_cloud = $mysqli->query($sql_abfrage_cloud);
$verzeichnis = '/upload/';
$zip_name = date("dHis").'_fc.zip';             
$anz_dateien = 0;
$error = 'fatal';
while($fetch = $abfrage_cloud->fetch_assoc()){
    $anz_dateien = $anz_dateien + 1;
    $zip_datei[$anz_dateien] = $fetch['path'];
}
$zip_arch = new ZipArchive;
$status = $zip_arch->open($zip_name, ZipArchive::CREATE);
if($status==true){
    foreach($zip_datei as $datei){
        $zip_arch->addFile($verzeichnis.$datei, $datei);
    }                                                                                      

    if(file_exists($zip_name)){
        $error = 'false';
    } else {
        $error = 'true';
    }
}
?>

我预计 $error 会是“假的”,但它是“真的”。

标签: php

解决方案


您需要调用$zip_arch->close()保存完成写入文件。

您还应该===在比较 的结果时使用$zip_archive->open(),因为非真结果是数字,并且任何非零数字比较等于true允许类型杂耍时。

$zip_arch = new ZipArchive;
$status = $zip_arch->open($zip_name, ZipArchive::CREATE);
if($status===true){
    foreach($zip_datei as $datei){
        $zip_arch->addFile($verzeichnis.$datei, $datei);
    }                                                                                      
    $zip_arch->close();

    if(file_exists($zip_name)){
        $error = 'false';
    } else {
        $error = 'true';
    }
}

推荐阅读