RE: Debugging custom streams

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 Ahha, after some rethinking, I've dropped the append custom stream, as its not really required.

And instead of using a custom in memory stream for handling the central directory stream, just using tmpfile(), the application
error has disappeared.

Jared


> > >>Jared Williams wrote:
> > >>
> > >>>Hi,
> > >>>	Short version, is there any way of listing all open
> > >>
> > >>resources from
> > >>
> > >>>within a PHP script? Think I may have a problem relating to
> > >>
> > >>the object/resource shutdown order within PHP, but cant see which 
> > >>custom stream handler still has an open resource.
> > 
> > why not let your zip class keep a list of opened streams (I can't 
> > imagine that it's not doing that already) and write a 
> function which 
> > will output a list of 'registered' stream resources that are still 
> > open [mis]using ftell() or feof() to check which streams are still 
> > 'active'.
> 
> There can only be one open stream at a time, when writing, as 
> a stream writes to what will be the final zip file, and if 
> they were not closed in the correct manner the resulting zip 
> file wouldn't be valid.
> 
> Perhaps I should explain in abit more detail how this is working.
> 
> The ZipArchive creates two streams, one for the actual final 
> zip, and the another for the central directories headers.
> 
> When fputs($stream, '0123456789') occurs the data goes 
> through 2 custom streams, and an optional filter.
> 
> Zip custom stream -> optional compression filter -> Append 
> custom stream -> final zip file.
> 
> The Zip custom stream, handles writing the local header to 
> the final zip file, calculating the compressed and 
> uncompressed size, and crc (using hash extension). Like so 
> 
> 	function stream_write($data)
> 	{ 
> 		$r = fwrite($this->compressedStream, $data);
> 		$this->uncompressedSize += strlen($data);
> 		hash_update($this->hashContext, $data);
> 		return $r;
> 	}
> 
> When the Zip custom stream is closed the zip local header is 
> rewritten with the correct values, and a central directory 
> header is written to the central directory stream. So if any 
> resource was left open, then an invalid zip file would result. 
> 
> All $zip->close() has left todo, is append the central 
> directory stream contents to the final zip, add a central end 
> directory header and close both streams for a valid zip.
> 
> Jared

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux