Summary: I'm writing a custom stream to wrap around regular fopen/close functions (the actual stream will have more, but this is the part I'm having an issue with). The stream_open() method creates a class variable holding a file handle created with fopen().
$this->fp = fopen($path,$mode);
A var_dump() of $this->fp shows a valid stream resource. However, if I try to use that resource during stream_read, stream_close, stream_eof, etc, it's no longer valid and has been converted to a bool(true) value.
However, another class variable created in the stream_open method retains it's value throughout the other methods. Is this some kind of serialization/sleep/??? issue?
That's the summary, here's the code:
This is the file that defines the custom stream and some of the implementation. Not all methods are implemented, but I don't think that matters to this issue.
--------------------
Custom Stream Class:
<?php
stream_wrapper_register('cache','CacheStream');class CacheStream
{
public $fp = FALSE;
public $foo = FALSE; function stream_open($path, $mode, $options='', &$opened_path='')
{
$path = substr($path,8);
$this->fp = fopen($path,$mode);
$this->foo = ' Test String ';
var_dump($this->fp);
var_dump($this->foo);
return $this->fp;
} function stream_close()
{
var_dump($this->fp);
var_dump($this->foo);
return fclose($this->fp);
} function stream_read($bytes)
{
var_dump($this->fp);
var_dump($this->foo);
return fread($this->fp,$bytes);
} function stream_eof()
{
var_dump($this->fp);
var_dump($this->foo);
if(feof($this->fp))
{ return TRUE; }
else
{ return FALSE; }
}
}?> --------------------
This is the test file that implements the custom stream. It first starts with the regular fopen/close functions to show it works with the test.rss file, then moves on to the custom stream.
--------------------
Test.php
<?php
error_reporting(E_ALL);
include('streamtest.php');if($fp1 = fopen('test.rss','r'))
{ echo 'File1 open<br />'; }
if($c = fread($fp1,20))
{ echo 'Content1: ' . htmlentities($c) . '<br />'; }
if(fclose($fp1))
{ echo 'File1 closed<br />'; }if($fp2 = fopen('cache://test.rss','r'))
{ echo 'File2 open<br />'; }
if($c = fread($fp2,20))
{ echo 'Content2: ' . htmlentities($c); }
if(fclose($fp2))
{ echo 'File2 closed<br />'; }?> --------------------
This is the result: -------------------- File1 open Content1: <?xml version="1.0" File1 closed
resource(6) of type (stream) string(13) " Test String " File2 open
bool(true) string(13) " Test String "
Warning: fread(): supplied argument is not a valid stream resource in c:\program files\apache group\Apache\htdocs\zorin\streamtest.php on line 31
bool(true) string(13) " Test String "
Warning: feof(): supplied argument is not a valid stream resource in c:\program files\apache group\Apache\htdocs\zorin\streamtest.php on line 38
bool(true) string(13) " Test String "
Warning: fclose(): supplied argument is not a valid stream resource in c:\program files\apache group\Apache\htdocs\zorin\streamtest.php on line 24
File2 closed
--------------------
--
---John Holmes...
Amazon Wishlist: www.amazon.com/o/registry/3BEXC84AB3A5E/
php|architect: The Magazine for PHP Professionals – www.phparch.com
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php

