ID:               38286
 Updated by:       [EMAIL PROTECTED]
 Reported By:      baldurien at bbnwn dot eu
-Status:           Open
+Status:           Feedback
 Bug Type:         Scripting Engine problem
 Operating System: Windows XP
 PHP Version:      5CVS-2006-08-01 (snap)
 New Comment:

Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows (zip):
 
  http://snaps.php.net/win32/php5.2-win32-latest.zip

For Windows (installer):

  http://snaps.php.net/win32/php5.2-win32-installer-latest.msi




Previous Comments:
------------------------------------------------------------------------

[2006-08-08 09:13:34] baldurien at bbnwn dot eu

Here is a zip file with less file (in fact, just 4) :

http://www.bbnwn.eu/works/stream-bugs-with-less-files.zip

Simply run php -f bug.php

------------------------------------------------------------------------

[2006-08-02 12:00:58] baldurien at bbnwn dot eu

Note : that BarInputStream.php and FooInputStream.php.

------------------------------------------------------------------------

[2006-08-02 12:00:17] baldurien at bbnwn dot eu

For the content of archive, you should look for Stream/bug.php.

For the number of files, no:

1. I tell you that a problem with require_once, hence, having all class
and interface declared in the same file work as expected

2. I can go down to 4 files. Whose content is that (I'm not at home,
today and tomorrow, so I can't send an archive file) : 

--- bug.php
<?php
abstract class Loader {
  protected abstract function loadFiles();
  protected abstract function doSomething();
  public final function load() {
    $this->loadFiles();
    $this->doSomething();
  }
}
class BarLoader extends Loader {
  protected function loadFiles() {require_once 'BarInputStream.php';}
  protected function doSomething() {
    $bar = new BarInputStream();
    $bar->seek(1);
  }
}
class FooLoader extends Loader {
  protected function loadFiles() {require_once 'FooInputStream.php';}
  protected function doSomething() {
    $foo = new FooInputStream();
  }
}
$b = new BarLoader();
$b->load();
$f = new FooLoader();
$f->load();
?>

--- InputStream.php
<?php
interface Stream {
  const SEEK_SET = SEEK_SET;
  const SEEK_CUR = SEEK_CUR;
  const SEEK_END = SEEK_END;
  
  public function seek($pos, $whence = Stream::SEEK_SET);
}
interface InputStream extends Stream {
  public function read(&$data);
}
?>
--- BarInputStream
<?php
require_once 'InputStream.php';
abstract class BarStream implements Stream {
  public function seek($pos, $whence = Stream::SEEK_SET) {
    echo __CLASS__, '->', __FUNCTION__, '()', "\n";
  }
}
class BarInputStream extends BarStream implements InputStream {
  public function read(&$data) {
    echo __CLASS__, '->', __FUNCTION__, '()', "\n";
  }
}
?>
--- FooInputStream
<?php
require_once 'InputStream.php';
abstract class FooStream implements Stream {
  public function seek($pos, $whence = Stream::SEEK_SET) {
    echo __CLASS__, '->', __FUNCTION__, '()', "\n";
  }
}
class FooInputStream extends FooStream implements InputStream {
  public function read(&$data) {
    echo __CLASS__, '->', __FUNCTION__, '()', "\n";
  }
}
?>
---END

I will add a short notice (if that serve): this will not happen if you
don't call $bar->seek(1).

------------------------------------------------------------------------

[2006-08-02 10:16:52] [EMAIL PROTECTED]

Please provide SHORT but COMPLETE reproduce script.
I don't think you need a bunch of files to get such a simple error
message. I'm pretty sure it's possible to reproduce it with just a
couple of classes in 10 lines.

# unzip stream-bugs.zip
Archive:  stream-bugs.zip
   creating: Stream/
  inflating: Stream/BarInputStream.php
  inflating: Stream/BarLoader.php
  inflating: Stream/BarStream.php
  inflating: Stream/bug.php
  inflating: Stream/FooInputStream.php
  inflating: Stream/FooLoader.php
  inflating: Stream/FooStream.php
  inflating: Stream/InputStream.php
  inflating: Stream/Loader.php
  inflating: Stream/Stream.php

I don't see any "bug.php" or anything else that could help first of all
to understand what is the problem.

------------------------------------------------------------------------

[2006-08-02 06:05:54] baldurien at bbnwn dot eu

If you read carefully, then you'll find a link :

http://www.bbnwn.eu/works/stream-bugs.zip

This an archive file containing all the sources (eg: the test case for
the bug), which when you call the file "bug.php" will show you an
example of bug.

I can't provide it on the server, as a PHP file, as it is a php4 server
(which does not support interface).

If you want a txt file with all the code inlined, then no : the bug is
DUE to the presence of require_once. The sole thing I can do is to
prepend the name of each file before, meaning you will have the create
each file on your own, while they are in the archive file.

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/38286

-- 
Edit this bug report at http://bugs.php.net/?id=38286&edit=1

Reply via email to