Grant Hinkson Blog

Silverlight, WPF, Fireworks, Flash, XAML, .NET, User Experience, Graphic Design, Web Programming and more!

Archive for July, 2005

Flash Forward Conference

Friday
Jul 1,2005

I’m excited to be attending my first Flash Forward Conference next week (July 6 – 8 ). Going to learn from leading flash developers and see the latest and greatest Macromedia has to offer.

  • Comments Off on Flash Forward Conference
  • Flash/XML Radio (Catalist Radio)

    • Filed under: Flash
    Friday
    Jul 1,2005

    This is an example I created several years ago when Flash 5 introduced XML and dynamic mp3 features. It is hosted on Flashkit.com and has been used/skinned/updated/dissected many times since its initial posting. Download the source from Flashkit. I’ll actually be posting a new version of this player in the coming month as it will be featured in a Teach Yourself XML book being released later this year.

  • Comments Off on Flash/XML Radio (Catalist Radio)
  • Create Zip Files Dynamically Using PHP

    • Filed under: PHP
    Friday
    Jul 1,2005

    Creating zip files dynamically can be quite useful under a number of circumstances. When I first had a need to do this I found an article at Zend.com (Creating Zip Files Dynamically) that covered this topic. The original code was designed to zip text passed as a string. I needed something that would allow me to zip existing files on the filesystem. The resulting code is below. In the time since I made these original modifications, the discussion has continued on the article page, so you may want to check it out. You could easily combine my updated code with the original to support both text and filesystem encoding. It may already be done on the site. Code:


    < ?php // Class definition found at http://www.zend.com/zend/spotlight/creating-zip-files3.php // Some alterations to the original posted code were made in order to get everything working properly // See example usage at the bottom of this page class zipfile { var $datasec = array(); var $ctrl_dir = array(); var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $old_offset = 0; function add_dir($name) { $name = str_replace("", "/", $name); $fr = "\x50\x4b\x03\x04"; $fr .= "\x0a\x00"; $fr .= "\x00\x00"; $fr .= "\x00\x00"; $fr .= "\x00\x00\x00\x00"; $fr .= pack("V",0); $fr .= pack("V",0); $fr .= pack("V",0); $fr .= pack("v", strlen($name) ); $fr .= pack("v", 0 ); $fr .= $name; $fr .= pack("V", 0); $fr .= pack("V", 0); $fr .= pack("V", 0); $this -> datasec[] = $fr;
    $new_offset = strlen(implode("", $this->datasec));

    $cdrec = "\x50\x4b\x01\x02";
    $cdrec .="\x00\x00";
    $cdrec .="\x0a\x00";
    $cdrec .="\x00\x00";
    $cdrec .="\x00\x00";
    $cdrec .="\x00\x00\x00\x00";
    $cdrec .= pack("V",0);
    $cdrec .= pack("V",0);
    $cdrec .= pack("V",0);
    $cdrec .= pack("v", strlen($name) );
    $cdrec .= pack("v", 0 );
    $cdrec .= pack("v", 0 );
    $cdrec .= pack("v", 0 );
    $cdrec .= pack("v", 0 );
    $ext = "\x00\x00\x10\x00";
    $ext = "\xff\xff\xff\xff";
    $cdrec .= pack("V", 16 );
    $cdrec .= pack("V", $this -> old_offset );
    $cdrec .= $name;

    $this -> ctrl_dir[] = $cdrec;
    $this -> old_offset = $new_offset;
    return;
    }

    function add_file($data, $name) {
    $fp = fopen($data,"r");
    $data = fread($fp,filesize($data));
    fclose($fp);
    $name = str_replace("", "/", $name);
    $unc_len = strlen($data);
    $crc = crc32($data);
    $zdata = gzcompress($data);
    $zdata = substr ($zdata, 2, -4);
    $c_len = strlen($zdata);
    $fr = "\x50\x4b\x03\x04";
    $fr .= "\x14\x00";
    $fr .= "\x00\x00";
    $fr .= "\x08\x00";
    $fr .= "\x00\x00\x00\x00";
    $fr .= pack("V",$crc);
    $fr .= pack("V",$c_len);
    $fr .= pack("V",$unc_len);
    $fr .= pack("v", strlen($name) );
    $fr .= pack("v", 0 );
    $fr .= $name;
    $fr .= $zdata;
    $fr .= pack("V",$crc);
    $fr .= pack("V",$c_len);
    $fr .= pack("V",$unc_len);

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

    $cdrec = "\x50\x4b\x01\x02";
    $cdrec .="\x00\x00";
    $cdrec .="\x14\x00";
    $cdrec .="\x00\x00";
    $cdrec .="\x08\x00";
    $cdrec .="\x00\x00\x00\x00";
    $cdrec .= pack("V",$crc);
    $cdrec .= pack("V",$c_len);
    $cdrec .= pack("V",$unc_len);
    $cdrec .= pack("v", strlen($name) );
    $cdrec .= pack("v", 0 );
    $cdrec .= pack("v", 0 );
    $cdrec .= pack("v", 0 );
    $cdrec .= pack("v", 0 );
    $cdrec .= pack("V", 32 );
    $cdrec .= pack("V", $this -> old_offset );

    $this -> old_offset = $new_offset;

    $cdrec .= $name;
    $this -> ctrl_dir[] = $cdrec;
    }

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

    return
    $data .
    $ctrldir .
    $this -> eof_ctrl_dir .
    pack("v", sizeof($this -> ctrl_dir)) .
    pack("v", sizeof($this -> ctrl_dir)) .
    pack("V", strlen($ctrldir)) .
    pack("V", strlen($data)) .
    "\x00\x00";
    }
    }

    // Test this class
    $zipTest = new zipfile();
    $zipTest->add_dir("images/");
    $zipTest->add_file("images/box1.jpg", "images/box1.jpg");
    $zipTest->add_file("images/box2.jpg", "images/box2.jpg");

    // Return Zip File to Browser
    Header("Content-type: application/octet-stream");
    Header ("Content-disposition: attachment; filename=zipTest.zip");
    echo $zipTest->file();

    // Alternatively, you can write the file to the file system and provide a link:
    /*
    $filename = "output.zip";
    $fd = fopen ($filename, "wb");
    $out = fwrite ($fd, $zipTest -> file());
    fclose ($fd);

    echo "Click here to download the new zip file.";
    */

    ?>

  • Comments Off on Create Zip Files Dynamically Using PHP
  • Meta


    Recent Comments