Ernest E Vogelsinger wrote: > At 15:57 20.03.2003, [EMAIL PROTECTED] spoke out and said: > --------------------[snip]-------------------- > >In order to distribute a single script I would like to store a small > >image internally. Is this at all possible with PHP? How would I go about > >it? Please feel free to rtfm me to the relevant sections. > --------------------[snip]-------------------- > > You could make some script to retrieve the hex values of the image byte by > byte, then create a source file like > $imgdata = '\xff\x19\x00\x12 etc...; > > Then when you're about to send the image simply transmit the correct > header() and echo out the data. > > This little sample works just perfectly: > > ---------------------------------------------------- > // use one of your files here, of course... > $file = 'images/dart.gif'; > $hf = fopen($file, 'r') or die("Can't open $file for reading"); > $bin = fread($hf, filesize($file)); > fclose($hf); > $asc = '$img_data = "'; > for ($i = 0, $len = strlen($bin); $i < $len; ++$i) { > if ($i && !($i % 16)) > $asc .= "\" .\n\t\""; > $asc .= '\\x' . bin2hex(substr($bin, $i, 1)); > } > $asc .= '";'; > > // $asc now contains the hex-coded binary file. > // Example (a real gif - try it) > $img_data = > "\x47\x49\x46\x38\x39\x61\x20\x00\x20\x00\xa2\xff\x00\x00\x00\x00" . > "\xff\x00\x00\xff\xff\x00\x00\x00\xff\xc0\xc0\xc0\x00\x00\x00\x00" . > "\x00\x00\x00\x00\x00\x21\xf9\x04\x01\x00\x00\x04\x00\x2c\x00\x00" . > "\x00\x00\x20\x00\x20\x00\x40\x03\xae\x48\xba\xac\xf0\x10\x34\x36" . > "\x06\x83\x21\x87\xc8\xa3\xd0\xd0\x82\x65\xe3\xd6\x81\x0f\x2a\x89" . > "\x25\x79\x6a\xe6\x33\xb1\x29\x6c\xab\x80\xd0\x94\x11\x8c\x7d\x31" . > "\x80\xca\x51\x0b\xde\x70\xc3\x19\xa1\xc3\x8c\x28\x67\xcd\xe8\xa2" . > "\x52\xb9\xb4\x82\x57\x41\xc8\x2a\x74\x15\x6f\xda\xe2\x96\x27\x7e" . > "\x0c\x04\x5a\xd5\x90\xfc\x6d\xf5\xbc\x34\x5f\xd4\x2d\x83\x5e\x8f" . > "\xc1\xe7\x93\xa9\xef\x2f\xe7\x75\x53\x54\x76\x6f\x36\x1d\x0a\x02" . > "\x55\x3b\x77\x78\x26\x5a\x84\x5d\x5e\x4d\x19\x1f\x4e\x71\x38\x91" . > "\x5e\x69\x49\x7f\x91\x8c\x94\x31\x49\x6c\x72\x39\x40\x5e\x6b\x65" . > "\x9e\x66\x03\xa9\xa8\xaa\x99\x1c\xa4\xa2\xad\x8d\xa1\x70\x44\xb0" . > "\x85\x92\xb9\x2b\xb8\xbc\x93\x38\x90\xb5\x86\x5b\x7b\xb1\x37\x87" . > "\x7e\x34\x73\xca\xcd\xce\x09\x00\x3b"; > > // Now write the stuff to a file > $hf = fopen("$file.asc", 'w') or die("Can't open $file.asc for writing"); > fwrite($hf, $asc); > fclose($hf); > > // Here you may either include the file, or copy/paste its contents into > your own code. > // The next lines are just to test the stuff - adjust the Content-Type > header to your needs: > > header('Content-Type: image/gif'); > eval($asc); // this will render the binary content into $img_data > echo $img_data; // send it > exit; // and voila > ---------------------------------------------------- > > Note that reading the file is only needed once as a "tool" to create the > "ascii version" of the binary file. > > -- > >O Ernest E. Vogelsinger > (\) ICQ #13394035 > ^ http://www.vogelsinger.at/
BullsEye indeed! After adjusting for win32 (added 'b' to fopen's) this script is a little gem. You really saved me quite some headaches. Thanks! -speedfreak -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php