ID:               35082
 Comment by:       Christoph dot Freundl at cs dot fau dot de
 Reported By:      Christoph dot Freundl at informatik dot uni-erlange
 Status:           Feedback
 Bug Type:         Apache2 related
 Operating System: Linux
 PHP Version:      5.0.5
 New Comment:

I can see that argument (which I already have been told when I brought
up this topic on the php-general mailing list) but then I wondered why
the corresponding SSI command <!--#include virtual=...--> keeps the
variables so I peeked into both Apache and PHP source code and saw the
similiarities (most notably the subrequests) between Apache's
handle_include() and PHP's virtual() implementation. But as I have no
idea of both projects' internals - and I still would favour virtual()
to behave exactly like the SSI include ;-) - I decided to report the
differing behaviour as a bug.
So, if the different behaviour is estimated as being correct then I
would still suggest to change the documentation of virtual() by
deleting the statement that virtual is _equivalent_ to the SSI call.


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

[2005-11-03 21:48:24] [EMAIL PROTECTED]

Actually, the behavior is correct as virtual() does a new apache
subrequest, which do not interact with each other. Not sure about the
messages you get though.

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

[2005-11-03 14:45:18] Christoph dot Freundl at cs dot fau dot de

I tried with the php5-200511030930 snapshot. The behaviour is still the
same, in fact I get some other errors which show up in the apache error
log:

When calling info.shtml:
/home/chfreund/php5-200511030930/Zend/zend_hash.c(1375) : ht=0x4074f780
is already destroyed

When calling info.php:
/home/chfreund/php5-200511030930/main/streams/streams.c(227) :  Freeing
0x08242D34 (128 bytes), script=/srv/www/htdocs/info.php
/home/chfreund/php5-200511030930/main/main.c(855) : Actual location
(location was relayed)
/home/chfreund/php5-200511030930/main/streams/plain_wrapper.c(180) : 
Freeing 0x0819791C (116 bytes), script=/srv/www/htdocs/info.php
/home/chfreund/php5-200511030930/main/main.c(855) : Actual location
(location was relayed)
/home/chfreund/php5-200511030930/main/fopen_wrappers.c(539) :  Freeing
0x081E71D4 (28 bytes), script=/srv/www/htdocs/info.php
Zend/zend_language_scanner.c(3138) :  Freeing 0x0819785C (140 bytes),
script=/srv/www/htdocs/info.php
=== Total 4 memory leaks detected ===

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

[2005-11-03 10:45:32] [EMAIL PROTECTED]

Please try using this CVS snapshot:

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

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

[2005-11-03 10:39:42] Christoph dot Freundl at informatik dot
uni-erlange

Description:
------------
If you use virtual() to include an shtml file which sets an environment
variable via <!--#set...-->, the set variable is not visible after the
virtual() call.

Reproduce code:
---------------
setvar.shtml
-------------------------------------------------
<!--#set var="myvar" value="myval" -->
-------------------------------------------------

showvar.php
-------------------------------------------------
<?php echo apache_getenv( "myvar" ); ?>
-------------------------------------------------

info.shtml
-------------------------------------------------
<!--#include virtual="setvar.shtml" -->
<!--#include virtual="showvar.php" -->
-------------------------------------------------

info.php
-------------------------------------------------
<?php
  virtual( "setvar.shtml" );
  echo apache_getenv( "myvar" );
?>
-------------------------------------------------


Expected result:
----------------
I expect that info.shtml and info.php should both give the same result,
i.e. show "myval". However, info.shtml does but info.php does not.
If this is a wanted behaviour (which I hope it is not), then at least
the documentation of virtual() --- "virtual() is an Apache-specific
function which is equivalent to <!--#include virtual...--> in
mod_include." --- is wrong.



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


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

Reply via email to