2

PHPでzipファイルのサイズを読み取って取得しようとしています。

以下は私のコードです:

    function create_zip($files, $file_name, $overwrite = false) {    
    foreach ($files as $imglink) {
        $img = file_get_contents($imglink);
        $destination_path = $_SERVER['DOCUMENT_ROOT'] . 'demoproject/downloads/' . time() . '.jpg';
        file_put_contents($destination_path, $img);
        $imgFiles[] = $destination_path;
    }

    if (file_exists($file_name) && !$overwrite) {
        return false;
    }
    $valid_files = array();
    if (is_array($imgFiles)) {
        foreach ($imgFiles as $file) {
            $valid_files[] = $file;
        }
    }

    if (count($valid_files)) {
        $zip = new ZipArchive();
        if ($zip->open($file_name, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
            echo "Sorry ZIP creation failed at this time";
        }
        foreach ($valid_files as $file) {
            $zip->addFile($file, pathinfo($file, PATHINFO_BASENAME));
        }

        $count = $zip->numFiles;
        $resultArr = array();
        $resultArr['count'] = $count;
        $resultArr['destination'] = $file_name;

        $filename = $file_name;
        $filepath = $_SERVER['DOCUMENT_ROOT'] . 'demoproject/';


        $fileSize = filesize($filepath . $filename) / 1024;

        echo 'size of the file is : ' . $fileSize . ' kb';
        exit;

//        $size = 0;
//        $resource = zip_open($filepath . $filename);
//        while ($dir_resource = zip_read($resource)) {
//            $size += zip_entry_filesize($dir_resource);
//        }

        header("Pragma: no-cache");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: " . zip_entry_filesize($filepath . $filename));

        if (@readfile($filepath . $filename) === false) {
            header('http://localhost/demoproject/fbindex.php');
            return 500;
        } else {
            header('Location:http://localhost/demoproject/fbindex.php');
            return 200;
        }
    } else {
        return false;
    }
}

$files: 画像の配列を含み、

$file_name: ファイルの名前を含む : つまり :$file_name = time() . ".zip";

上記のコード$filenameには、実際の zip ファイルと$filepath、zip ファイルの場所が含まれています。

問題は、ファイルを読み取っていますが、実際のファイル サイズではなく常にサイズ 0 を表示していることです。

これは私がやっている:

echo $size;

O/P : 0

どこが間違っていますか?助けが必要。ありがとう

4

3 に答える 3

1

これを試して -

$fileSize =  filesize($filepath . $filename)/1024;
echo 'size of the file is : '.$fileSize.' kb';
于 2013-01-07T10:32:31.753 に答える
0

ファイルを追加した直後に ZIP ファイルを閉じるべきではありませんか?

$zip->close();
于 2013-01-07T11:21:51.960 に答える
0

clearstatcache()呼び出す直前に試してくださいfilesize()

これを行う前に zip ファイルを閉じるのも良い考えです。

私はこれに少し遅れていることを知っていますが、誰が知っていますか?

于 2018-03-16T06:22:43.023 に答える