需要帮助处理 ZIP 文件

发布于 2024-10-02 19:17:08 字数 1308 浏览 4 评论 0原文

这是我的场景:

  • 我上传一个zip文件
  • 检查zip文件中的每个文件
  • 如果文件!=图像,则将文件移动到目的地
  • 如果文件==图像,调整图像大小并移动到目的地

我用谷歌搜索并看到了不同的解决方案,但没有一个在哪里人们可以在将文件保存到最终目的地之前对其进行处理。

这是我到目前为止得到的功能:

  // Extract zip file and return files in an array. 
  private function processZip() {
    $zip = new ZipArchive;    
    $tmp_dir = FB_PLUGIN_DIR.'tmp/';

    // Extract files to tmp dir
    if ($zip->open($this->file['tmp_name']) === TRUE) {
      //Check if temp dir exists. If not, create one.
      if (!is_dir($tmp_dir)) {
        mkdir($tmp_dir, 0700);
      }

      $zip->extractTo($tmp_dir);
      $zip->close();

    /* Process extracted files */ 

    foreach(glob($tmp_dir.'*.*') as $filename) {

        // Somehow get MIME type here without using 'finfo' and 'mime_content_type'
        // I haven't installed PEAR and 'mime_content_type' is decapricated.
    }      

      return '1'; // success
    } else {
      return "0"; // fail
    } 
  } 

我不确定我是否朝着正确的方向前进。不知何故,我认为我应该能够在“ZIP 循环”中处理文件。

有没有办法读取 ZIP 文件中的文件,确定 MIME 类型,然后处理文件?

我找到了这个例子:http://www.java-samples.com/showtutorial。 php?tutorialid=985
我认为它接近我的需要。但不知道要修改什么。

This is my scenario:

  • I upload a zip file
  • Check each file in zip file
  • If file != image, then move file to destination
  • if file == image, resize image and move to destination

I googled around and seen different solutions, but none where one can process files before saving them at the final destination.

This is the function I got so far:

  // Extract zip file and return files in an array. 
  private function processZip() {
    $zip = new ZipArchive;    
    $tmp_dir = FB_PLUGIN_DIR.'tmp/';

    // Extract files to tmp dir
    if ($zip->open($this->file['tmp_name']) === TRUE) {
      //Check if temp dir exists. If not, create one.
      if (!is_dir($tmp_dir)) {
        mkdir($tmp_dir, 0700);
      }

      $zip->extractTo($tmp_dir);
      $zip->close();

    /* Process extracted files */ 

    foreach(glob($tmp_dir.'*.*') as $filename) {

        // Somehow get MIME type here without using 'finfo' and 'mime_content_type'
        // I haven't installed PEAR and 'mime_content_type' is decapricated.
    }      

      return '1'; // success
    } else {
      return "0"; // fail
    } 
  } 

I'm not sure if I'm going in the right direction here. Somehow I think I should be able to process the files while in the "ZIP loop".

Is there a way I can read the files in the ZIP file, determin the MIME type and then process file?

I found this example: http://www.java-samples.com/showtutorial.php?tutorialid=985
I think it's close to what I need. But not sure what to modify.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泡沫很甜 2024-10-09 19:17:08

解耦您的流程。首先从 ZIP 文件中提取所有内容,然后扫描文件中的图像文件并进行处理。

这是一个更简单的过程,并且可以更容易地分解以处理更大的 zip 文件。

Decouple your processes. Extract everything from the ZIP file first, then scan the files for image files and process them.

It's a simpler process, and can be more easily decomposed for dealing with larger zipfiles.

梦境 2024-10-09 19:17:08

以下是我过去处理 zip 文件而不提取整个文件的方法。

$zip = new ZipArchive;
$zip->open($file);
for ($i = 0; $i < $zip->numFiles; $i++) {
    $entry = $zip->statIndex($i);
    if ($entry['size'] > 0) {
        $data = $zip->getFromIndex($i);
        // $data is a binary string of file data
        // which can be used in GD functions for images
        // and written to a location for regular files

        if (preg_match('/\.jpe?g$/i', $entry['name'])) {
            // JPEG file
        } else {
            // Not a JPEG file :-)
        }
    }
}
$zip->close();

不幸的是,我找不到一种方法来实际读取文件信息而不提取它,所以我使用了文件扩展名检测。

Here's how I've processed a zip file in the past without extracting the whole thing

$zip = new ZipArchive;
$zip->open($file);
for ($i = 0; $i < $zip->numFiles; $i++) {
    $entry = $zip->statIndex($i);
    if ($entry['size'] > 0) {
        $data = $zip->getFromIndex($i);
        // $data is a binary string of file data
        // which can be used in GD functions for images
        // and written to a location for regular files

        if (preg_match('/\.jpe?g$/i', $entry['name'])) {
            // JPEG file
        } else {
            // Not a JPEG file :-)
        }
    }
}
$zip->close();

Unfortunately, I couldn't find a way to actually read the file info without extracting it so I've gone with file extension detection.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文