Author Topic: [BUG] Script für Zip-Files Erstellung braucht zuviel Speicher  (Read 8545 times)

0 Members and 1 Guest are viewing this topic.

Offline tn123

  • Pre-Newbie
  • Posts: 3
    • View Profile
Es werden in 4images einige Dateien als "Download als Zip" angeboten.

Der Code wiederum, der diese Zips produziert ist ziemlich "in-effizient".
Durch komplettes in-memory speichern der Daten als auch durch etliche unnötige string-Operationen mit den Datei-Inhalten
(etwa implodes, oder nested substr)
wird der Speicherbedarf des scripts unnötig in die Höhe getrieben.

So ist es ein leichtes, das etwa ein Lighbox-Zip ein memory_limit (von bei uns 32MB) bricht.
Das es nicht nur uns so geht beweist etwa folgender thread:
http://www.4homepages.de/forum/index.php?topic=6848.0

Ich habe uns eine replacement-class gebaut, die wir statt der includes/zip.php mit Erfolg einsetzen.
Diese ist hier zu finden:
http://celebnamer.celebworld.ws/sources/zipfile.class4.phps

Anmerkungen zu dieser Klasse:
  • Weniger Speicherbedarf durch Benutzung eines Standard tempfile() bei den Daten.
  • Weniger string-Operationen
  • Besseres free'en der Resourcen (unset()en)
  • (orginal classe ist php5, diese ist "portiert")

Ferner bedarf es Änderungen in der download.php
In unserem Fall sehen diese (für action=lightbox) so aus (unkommentiert):

if ($action == "lightbox") {
  if (empty(
$user_info['lightbox_image_ids']) || !function_exists("gzcompress") || !function_exists("crc32")) {
    
header("Location: ".$site_sess->url($url"&"));
    exit;
  }

  
$image_id_sql str_replace(" "", "trim($user_info['lightbox_image_ids']));
  
$image_ids = array();
  
$sql "SELECT image_id, cat_id, image_media_file, image_download_url
          FROM "
.IMAGES_TABLE."
          WHERE image_active = 1 AND image_id IN (
$image_id_sql) AND cat_id NOT IN (".get_auth_cat_sql("auth_download""NOTIN").")";
  
$result $site_db->query($sql);

  if (
$result)
  {
    @
set_time_limit(120);
    include(
ROOT_PATH."includes/zip2.php");
    
$file sprintf('lightbox_%s.zip'gmdate('Ymd-His'));
    
$zipfile = new ZipFile($file);
    
$file_added 0;
    while (
$image_row $site_db->fetch_array($result))
    {
      if (!empty(
$image_row['image_download_url']))
      {
        if (
is_remote_file($image_row['image_download_url']) || is_local_file($image_row['image_download_url']))
        {
          
$file_path $image_row['image_download_url'];
        }
      }
      else if (
is_remote($image_row['image_media_file']));
      else
      {
        
$file_path MEDIA_PATH."/".$image_row['cat_id']."/".$image_row['image_media_file'];
      }

      if (!empty(
$file_path) && is_file($file_path) && is_readable($file_path))
      {
        
$zipfile->addFile($file_path);
        
$file_added true;
        
$image_ids[] = $image_row['image_id'];
      }
    }

    if (
$file_added)
    {
      if (
$user_info['user_level'] != ADMIN)
      {
        
$sql "UPDATE ".IMAGES_TABLE."
                SET image_downloads = image_downloads + 1
                WHERE image_id IN ("
.trim(implode(", "$image_ids)).")";
        
$site_db->query($sql);
      }
      
$zipfile->send();
      exit;
    }
    else {
      
header("Location: ".$site_sess->url($url"&"));
      exit;
    }
  }
}


Wenn er die Klasse aufnehmen, oder teilweise nutzen wolt nur zu -> BSD-Style license ;)

PS:
Wer bugs findet darf sie behalten ;)

Offline Jan

  • Administrator
  • 4images Guru
  • *****
  • Posts: 5.024
    • View Profile
    • 4images - Image Gallery Management System
Re: [BUG] Script für Zip-Files Erstellung braucht zuviel Speicher
« Reply #1 on: March 30, 2005, 11:00:02 AM »
Super, danke. Auch wenns nicht wirklich ein Bug ist ;)
Your first three "must do" before you ask a question:
1. Forum rules
2. FAQ
3. Search

Offline tn123

  • Pre-Newbie
  • Posts: 3
    • View Profile
Re: [BUG] Script für Zip-Files Erstellung braucht zuviel Speicher
« Reply #2 on: April 01, 2005, 12:09:18 AM »
Frage der Definition...
Nach mozilla Definition (ind die ist eigentlich recht üblich) ist es nen bug LOL

Aber eigentlich auch so:
Wenn die lightbox ständig crasht nur weil mal 10, 20MB Pix drinne sind ist das wohl nicht im Sinne des Erfinders.
(Da ja son memory_limit doch ne gewisse Berechtigung hat)

Offline michaelp

  • Pre-Newbie
  • Posts: 3
    • View Profile
Re: [BUG] Script für Zip-Files Erstellung braucht zuviel Speicher
« Reply #3 on: July 21, 2005, 04:00:07 PM »
http://celebnamer.celebworld.ws/sources/zipfile.class4.phps
ist leider nicht mehr vorhanden. kannst du die nochmal online stellen?

Offline tn123

  • Pre-Newbie
  • Posts: 3
    • View Profile
Re: [BUG] Script für Zip-Files Erstellung braucht zuviel Speicher
« Reply #4 on: July 21, 2005, 09:55:25 PM »
http://celebnamer.celebworld.ws/sources/zipfile.class4.phps
ist leider nicht mehr vorhanden. kannst du die nochmal online stellen?
Wieder online gestellt ;)

Offline michaelp

  • Pre-Newbie
  • Posts: 3
    • View Profile
Re: [BUG] Script für Zip-Files Erstellung braucht zuviel Speicher
« Reply #5 on: July 22, 2005, 11:33:16 AM »
also die datei, die ich jetzt da runtergeladen hab, soll die in zip2.php umbenannt werden? denn dann kommt folgender fehler:
"Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/host/cem/4images/includes/zip2.php on line 58"

die download.php hab ich auch verändert, wies dastand

Offline michaelp

  • Pre-Newbie
  • Posts: 3
    • View Profile
Re: [BUG] Script für Zip-Files Erstellung braucht zuviel Speicher
« Reply #6 on: July 22, 2005, 03:45:13 PM »
die fehlermeldung kommt jetzt nicht mehr. es ist jetzt aber häufig so, dass der download einfach abbricht. züruck bleibt dann nur ne unvollständige zip-datei