0

ローカル システムで次のコードを使用して zip ファイルをダウンロードしようとすると、ファイルはすべてのファイルと共にダウンロードされますが、サーバーでは 20 バイトでダウンロードされ、抽出ファイルが破損してアーカイブが見つからないため、追加しましたこのコードをいくつかチェックして実行しますが、今回はファイルが見つかりません。このチェック内に入ります (if (!is_file($archive_file_name)))。

function zipFilesAndDownload($file_names,$archive_file_name,$file_path)
    {
        $zip = new ZipArchive();
        //create the file and throw the error if unsuccessful
        if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE )!==TRUE) {
            exit("cannot open <$archive_file_name>\n");
        }

        //add each files of $file_name array to archive
        foreach($file_path as $file_path)
        {
            if(basename($file_path) =="documents")
            {

                foreach($file_names as $value=>$files)
                {
                    $customer_files = $this->fetchCustomFieldValuesAndFieldNamesByOrder($files['order_id']);
                    if($customer_files['field_value'] !="" && file_exists($file_path.$customer_files['field_value']))
                    {
                        $file_extension = pathinfo($customer_files['field_value'], PATHINFO_EXTENSION);
                        $zip_file_name = $files['customer_name']."_"."Files.".$file_extension;
                        $zip->addFile($file_path.$customer_files['field_value'],$zip_file_name);
                    }
                    //echo $customer_files['field_value']."<br>";
                }
            } else
            {
                foreach($file_names as $value=>$files)
                {

                    if($files['file_name'] !="" && file_exists($file_path.$files['file_name']))
                {
                    $file_extension = pathinfo($files['file_name'], PATHINFO_EXTENSION);
                    $zip_file_name = $files['customer_name']."_"."Application".".$file_extension";
                    $zip->addFile($file_path.$files['file_name'],$zip_file_name);
                        //  echo $file_path.$files['file_name'],$zip_file_name."<br>";
                }

                }
        }
        }
        //  echo "numfiles: " . $zip->numFiles . "\n";
        //  echo "status:" . $zip->status . "\n";
        $zip->close();//exit;
     //then send the headers to foce download the zip file
        if (headers_sent()) {
            echo 'HTTP header already sent';
        } else {
            if (!is_file($archive_file_name)) {
                header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
                echo 'File not found';
            } else if (!is_readable($archive_file_name)) {
                header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
                echo 'File not readable';
            } else {
                header("Content-type: application/zip");
                header("Content-Disposition: attachment; filename=$archive_file_name");
                header("Pragma: no-cache");
                header("Expires: 0");
                readfile("$archive_file_name");
                exit;
            }
        }
            }
4

1 に答える 1

2

$zip->status からステータス 11 を取得している場合は、ZIP しようとしているファイルが存在しないことを意味します。Zip / ZipArchive クラスのエラー コードに関するドキュメントは次のとおりです: http://php.net/manual/en/zip.constants.php

getcwd()を使用して現在のパスが正しいこと、およびこのパス上のファイルが実際に存在することを確認してください。

于 2012-09-24T10:35:20.780 に答える