0

PCLZIP を使用して、少数のドキュメントと PDF を含む ZIP を作成しています。一部のマシンでは、ユーザーが zip が破損していると主張しています。

私のマシンでは、ZIP が破損していることはわかりませんが、その zip を Gmail 経由で送信しようとすると、実行可能ファイルが含まれていると言って ZIP がブロックされますが、実際にはその zip にはドキュメントと PDF ファイルしかありません。そのため、zip が破損していると主張する人々と、アプリから作成されたこれらの zip を Gmail がブロックしているという関係が見られます。

すべてのファイルを抽出し、Windows の [アーカイブに追加] オプションを使用してそれらを zip に再度追加しようとしました。この zip を送信すると、gmail はブロックされません。

したがって、PHP アプリで ZIP を作成しているときに何らかの問題が発生するはずです。

ZIPを作成しているコードの関連部分は次のとおりです。

<?php 

$archive = new PclZip("exportZIPs/{$randomFileName}.zip");
$orgFile = $document->sAbsStoragePath.$document->sSysFileName;

$filePath = array();

$filePath[] = array( PCLZIP_ATT_FILE_NAME => $orgFile,
       PCLZIP_ATT_FILE_NEW_FULL_NAME => "{$someNewName}"
    );

foreach ($aList as $key => $value) {


    $filePathTmp = "{$SomePath}.pdf";

    if(!file_exists($filePathTmp)) {
        continue;
    }
    //$filePath[] = "{$SomePath}.pdf";

    $filePath[] = array( PCLZIP_ATT_FILE_NAME => $filePathTmp,
       PCLZIP_ATT_FILE_NEW_FULL_NAME => "PDFs/Version-{$sVersion}.pdf"
    );
}

$v_list = $archive->add($filePath, PCLZIP_OPT_REMOVE_PATH, 'PDFs');
if ($v_list == 0) {
    die("Cannot Create Archive! Try again or contact administrator");
    die("Error : ".$archive->errorInfo(true));
}

header("Content-Type: application/zip");
header("Content-Disposition:attachment;filename=\"{$SOMENAME}.zip\"");

readfile("exportZIPs/{$randomFileName}.zip");

@unlink("exportZIPs/{$randomFileName}.zip");

?>

私は何を間違っていますか?

4

1 に答える 1

0

最後に、問題はアーカイブの作成にあるのではないことがわかりました。コンテンツ データの送信中に問題が発生しました。

次の行をコードに追加して修正しました。

header("Content-Type: application/octet-stream");

header("Content-Disposition:attachment;filename=\"{$document->iID}-{$document->sName}.zip\"");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$originalFile = "exportZIPs/{$randomFileName}.zip";
header('Content-Length: ' . filesize($originalFile));
ob_clean();
flush();
readfile("exportZIPs/{$randomFileName}.zip");

@unlink("exportZIPs/{$randomFileName}.zip");

これを特定するのに時間がかかりすぎた理由は、winZIP と他の ZIP アプリが問題を自動修正していて、アーカイブが破損していると報告していなかったためです。

于 2014-05-26T08:07:00.867 に答える