Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: [PHP] Zip al volo ?

  1. #1
    Utente di HTML.it L'avatar di Threepwood
    Registrato dal
    Feb 2003
    Messaggi
    2,107

    [PHP] Zip al volo ?

    Salve a tutti!

    ho letto la pillola sulla creazione dei file Zip.

    Il mio quesito è :
    se io ho dei file NON fisicamente sul server
    es.
    codice:
    <?
      $file1="<html><body>file uno bla bla</body></html>";
      $file2="<html><body>file uno bla bla</body></html>";
      $file3="<html><body>file uno bla bla</body></html>";
    ?>
    E' possibile zippare questi 3 file, in uno zip anch'esso "non eistente" , ma presente solamente in una variabile? (in modo da farlo scaricare poi come header...)

    Grazie in anticipo!
    Guybrush Threepwood

  2. #2
    i file devono essere raggiungibili dal server quindi un'altro server potrebbe andare un client no

  3. #3
    Utente di HTML.it L'avatar di Threepwood
    Registrato dal
    Feb 2003
    Messaggi
    2,107
    Originariamente inviato da bubu77
    i file devono essere raggiungibili dal server quindi un'altro server potrebbe andare un client no
    ehm.. non ci ho capito molto


    intendi dire che la funzione ZIP vuole necessariamente dei file fisici?
    Guybrush Threepwood

  4. #4
    scusa ero totalmente fuori strada, non ho letto bene il tuo post

    allora in questo caso devi controllere se le funzioni zip o le classi che li creano accettano l'invio di una stringa.

    Concettualmente non ci sono problemi ma non ho mai avuto la necessità di fare una cosa del genere

  5. #5
    Utente di HTML.it L'avatar di Threepwood
    Registrato dal
    Feb 2003
    Messaggi
    2,107
    mi riferivo a questo thread

    http://forum.html.it/forum/showthrea...postid=4174481

    La necessità si è posta quando ho saputo che il tipo di contratto che ho aruba non permette di creare file

    pertanto l'unica chance che mi rimane è crearlo in un file (inteso come variabile) e passarne il codice come file/header
    Guybrush Threepwood

  6. #6
    se non sbaglio dovresti avere una cartella con tutti i permessi compreso quello di scrittura

  7. #7
    Utente di HTML.it L'avatar di Threepwood
    Registrato dal
    Feb 2003
    Messaggi
    2,107
    infatti uso da poco aruba, non per mia volontà... devo adattarmi


    a questo punto il problema rimane solo il primo : una classe che accetti file non fisici da zippare...

    del tipo

    $file="prova 1 bla bla";
    $zippo-->add_file($file);


    sto cercando in giro ma non trovo nulla di simile
    Guybrush Threepwood

  8. #8
    se non sbaglio molte classi sono strutturate per fare una cosa tipo

    $zippo-->add_file(fread($file));

    quindi basta toglier eil fread

  9. #9
    Utente di HTML.it L'avatar di Threepwood
    Registrato dal
    Feb 2003
    Messaggi
    2,107
    magari fosse così facile

    spesso trovo sintassi del tipo
    codice:
    $file['data'] = fread($fp,$file['stat'][7]);
    o in altri casi, il file viene letto riga x riga per essere processato riga x riga appunto...
    Guybrush Threepwood

  10. #10
    <?php

    /*

    Zip file creation class
    makes zip files on the fly...

    use the functions add_dir() and add_file() to build the zip file;
    see example code below

    by Eric Mueller
    http://www.themepark.com

    v1.1 9-20-01
    - added comments to example

    v1.0 2-5-01

    initial version with:
    - class appearance
    - add_file() and file() methods
    - gzcompress() output hacking
    by Denis O.Philippov, webmaster@atlant.ru, http://www.atlant.ru

    */

    // official ZIP file format: http://www. // pkware.com/appnote.txt

    class zipfile
    {

    var $datasec = array(); // array to store compressed data
    var $ctrl_dir = array(); // central directory
    var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
    var $old_offset = 0;

    function add_dir($name)

    // adds "directory" to archive - do this before putting any files in directory!
    // $name - name of directory... like this: "path/"
    // ...then you can add files using add_file with names like "path/file.txt"
    {
    $name = str_replace("\\", "/", $name);

    $fr = "\x50\x4b\x03\x04";
    $fr .= "\x0a\x00"; // ver needed to extract
    $fr .= "\x00\x00"; // gen purpose bit flag
    $fr .= "\x00\x00"; // compression method
    $fr .= "\x00\x00\x00\x00"; // last mod time and date

    $fr .= pack("V",0); // crc32
    $fr .= pack("V",0); //compressed filesize
    $fr .= pack("V",0); //uncompressed filesize
    $fr .= pack("v", strlen($name) ); //length of pathname
    $fr .= pack("v", 0 ); //extra field length
    $fr .= $name;
    // end of "local file header" segment

    // no "file data" segment for path

    // "data descriptor" segment (optional but necessary if archive is not served as file)
    $fr .= pack("V",$crc); //crc32
    $fr .= pack("V",$c_len); //compressed filesize
    $fr .= pack("V",$unc_len); //uncompressed filesize

    // add this entry to array
    $this -> datasec[] = $fr;

    $new_offset = strlen(implode("", $this->datasec));

    // ext. file attributes mirrors MS-DOS directory attr byte, detailed
    // at http://support.microsoft.com/support.../Q125/0/19.asp

    // now add to central record
    $cdrec = "\x50\x4b\x01\x02";
    $cdrec .="\x00\x00"; // version made by
    $cdrec .="\x0a\x00"; // version needed to extract
    $cdrec .="\x00\x00"; // gen purpose bit flag
    $cdrec .="\x00\x00"; // compression method
    $cdrec .="\x00\x00\x00\x00"; // last mod time & date
    $cdrec .= pack("V",0); // crc32
    $cdrec .= pack("V",0); //compressed filesize
    $cdrec .= pack("V",0); //uncompressed filesize
    $cdrec .= pack("v", strlen($name) ); //length of filename
    $cdrec .= pack("v", 0 ); //extra field length
    $cdrec .= pack("v", 0 ); //file comment length
    $cdrec .= pack("v", 0 ); //disk number start
    $cdrec .= pack("v", 0 ); //internal file attributes
    $ext = "\x00\x00\x10\x00";
    $ext = "\xff\xff\xff\xff";
    $cdrec .= pack("V", 16 ); //external file attributes - 'directory' bit set

    $cdrec .= pack("V", $this -> old_offset ); //relative offset of local header
    $this -> old_offset = $new_offset;

    $cdrec .= $name;
    // optional extra field, file comment goes here
    // save to array
    $this -> ctrl_dir[] = $cdrec;


    }


    function add_file($data, $name)

    // adds "file" to archive
    // $data - file contents
    // $name - name of file in archive. Add path if your want

    {
    $name = str_replace("\\", "/", $name);
    //$name = str_replace("\\", "\\\\", $name);

    $fr = "\x50\x4b\x03\x04";
    $fr .= "\x14\x00"; // ver needed to extract
    $fr .= "\x00\x00"; // gen purpose bit flag
    $fr .= "\x08\x00"; // compression method
    $fr .= "\x00\x00\x00\x00"; // last mod time and date

    $unc_len = strlen($data);
    $crc = crc32($data);
    $zdata = gzcompress($data);
    $zdata = substr( substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
    $c_len = strlen($zdata);
    $fr .= pack("V",$crc); // crc32
    $fr .= pack("V",$c_len); //compressed filesize
    $fr .= pack("V",$unc_len); //uncompressed filesize
    $fr .= pack("v", strlen($name) ); //length of filename
    $fr .= pack("v", 0 ); //extra field length
    $fr .= $name;
    // end of "local file header" segment

    // "file data" segment
    $fr .= $zdata;

    // "data descriptor" segment (optional but necessary if archive is not served as file)
    $fr .= pack("V",$crc); //crc32
    $fr .= pack("V",$c_len); //compressed filesize
    $fr .= pack("V",$unc_len); //uncompressed filesize

    // add this entry to array
    $this -> datasec[] = $fr;

    $new_offset = strlen(implode("", $this->datasec));

    // now add to central directory record
    $cdrec = "\x50\x4b\x01\x02";
    $cdrec .="\x00\x00"; // version made by
    $cdrec .="\x14\x00"; // version needed to extract
    $cdrec .="\x00\x00"; // gen purpose bit flag
    $cdrec .="\x08\x00"; // compression method
    $cdrec .="\x00\x00\x00\x00"; // last mod time & date
    $cdrec .= pack("V",$crc); // crc32
    $cdrec .= pack("V",$c_len); //compressed filesize
    $cdrec .= pack("V",$unc_len); //uncompressed filesize
    $cdrec .= pack("v", strlen($name) ); //length of filename
    $cdrec .= pack("v", 0 ); //extra field length
    $cdrec .= pack("v", 0 ); //file comment length
    $cdrec .= pack("v", 0 ); //disk number start
    $cdrec .= pack("v", 0 ); //internal file attributes
    $cdrec .= pack("V", 32 ); //external file attributes - 'archive' bit set

    $cdrec .= pack("V", $this -> old_offset ); //relative offset of local header
    // &n // bsp; echo "old offset is ".$this->old_offset.", new offset is $new_offset
    ";
    $this -> old_offset = $new_offset;

    $cdrec .= $name;
    // optional extra field, file comment goes here
    // save to central directory
    $this -> ctrl_dir[] = $cdrec;
    }

    function file() { // dump out file
    $data = implode("", $this -> datasec);
    $ctrldir = implode("", $this -> ctrl_dir);

    return
    $data.
    $ctrldir.
    $this -> eof_ctrl_dir.
    pack("v", sizeof($this -> ctrl_dir)). // total # of entries "on this disk"
    pack("v", sizeof($this -> ctrl_dir)). // total # of entries overall
    pack("V", strlen($ctrldir)). // size of central dir
    pack("V", strlen($data)). // offset to start of central dir
    "\x00\x00"; // .zip file comment length
    }
    }

    ?>

    questa semplice classe che se non sbaglio è stata + volte trattata sul forum e dovrebbe essere quella usata da phpmyadmin accetta nel metodo
    add_file
    accetta 2 parametri, il contenuto ed il nome del file

    Al contenuto puoi passare una stringa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.