0

IamはPHP5.2xと「ZipArchive」に夢中になっています。次のコードはエラーをスローせず、すべての部分がtrueを返しますが、ZIPファイルは作成されません。

誰かが見ないエラーを見ることができますか?

if ($handle = opendir($directory)) {
        $zip = new ZipArchive();

        $filename = time() . '.zip';
        $path = APPLICATION_PATH . '/../download/';

        $status = $zip->open($path . $filename, ZIPARCHIVE::CREATE);

        if ($status !== true) {
            $this->log->err('Cant create zipArchive!');
            return false;
        } 

        while (false !== ($file = readdir($handle))) {
            if (!is_dir($file)) {
                if (is_readable($file)) {
                    if (!$zip->addFile($file)) {
                        $this->log->err('Cant add File to archive: ' . $file);
                    }
                } else {
                     $this->log->debug('Added file to archive: ' . $file);
                }
            }
        }

        closedir($handle);

        if (!$zip->close()) {
            $error = $zip->getStatusString();
            $this->log->err($error); 
            $this->log->err('Cant create archive..');
        } 
    }
4

1 に答える 1

1

ZIPアーカイブに実際にファイルを追加することはありません。エラーが発生しない唯一の理由です。

is_readable($file)常に戻りfalse、それAdded file to archive ...が印刷された場合、おそらくelseブロックを置き忘れたためです。

フォルダをに追加する$file必要があります。あなたの場合は次のようになります$directory

while (false !== ($file = readdir($handle))) {
    if (!is_dir($directory . $file)) {
        if (is_readable($directory . $file)) {
           if (!$zip->addFile($directory . $file)) {
                $this->log->err('Cant add File to archive: ' . $file);
            } else {
                $this->log->debug('Added file to archive: ' . $file);
            }
        } else {
            $this->log->debug('File not readable: ' . $file);
        }
    }
}
于 2012-08-27T16:59:11.640 に答える