0

ユーザーが100mbのファイルをアップロードできるフォームがあるため、アップロードが遅れます。そのため、最初にフォームの送信時に画像を圧縮してからサーバーにアップロードしてから、サーバーに抽出することにしました。ロードプロセスが減少するように、したがって、これには次のようなスクリプトを使用しました。

<?php
$zip = new ZipArchive();
$filename = "newzip.zip";

if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
   exit("cannot open <$filename>\n");
}
$zip->addFromString("myfile.jpeg", 
"This is the first file in our ZIP, added as 
firstfile.txt.\n");

echo "numfiles: " . $zip->numFiles . "\n";
$zip->close();

$zip1 = zip_open("newzip.zip");
if ($zip1) {
  while ($zip_entry = zip_read($zip1)) {
    $fp = fopen(zip_entry_name($zip_entry), "w");
    if (zip_entry_open($zip1, $zip_entry, "r")) {
      $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
      fwrite($fp,"$buf");
      zip_entry_close($zip_entry);
      fclose($fp);
    }
  }
  zip_close($zip1);
  unlink("newzip.zip");
}
?>

上記のコードから画像を抽出しましたが、抽出後、画像のサイズが61バイトに縮小されて破損しているため、表示できません。

このコードの何が問題になっているのか教えてください

4

3 に答える 3

2

ここでクライアント側とサーバー側を混同していると思います。PHP スクリプトはサーバー側で実行されるため、単純に ZIP クライアント側を作成することはできません。そのため、ファイルを送信する前にファイルを圧縮するようにユーザーに指示するか、ie. アップロードする前にファイルを圧縮する Java アプレット。

于 2010-07-08T09:55:54.840 に答える
0
$zip->addFromString("myfile.jpeg", 
"This is the first file in our ZIP, added as 
firstfile.txt.\n");

おそらくあなたは代わりに欲しかった:

$zip->addFromString("firstfile.txt", 
"This is the first file in our ZIP, added as 
firstfile.txt.\n");

取得した61バイトのファイルは、最初に追加したファイルです。

echo strlen("This is the first file in our ZIP, added as 
firstfile.txt.\n");

与える61

于 2010-07-08T09:41:36.700 に答える