#35082 [Opn->Csd]: virtual() does not preserve variables from included shtml files
| From: | vrana@php.net | Date: | Wed, 09 Nov 2005 15:44:44 +0000 |
| Subject: | #35082 [Opn->Csd]: virtual() does not preserve variables from included shtml files | ||
| References: | 1 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969370824@lists.php.net to get a copy of this message | ||
ID: 35082
Updated by: vrana@php.net
Reported By: Christoph dot Freundl at informatik dot uni-erlange
-Status: Open
+Status: Closed
Bug Type: Documentation problem
Operating System: Linux
PHP Version: Irrelevant
New Comment:
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.
Thank you for the report, and for helping us make our documentation
better.
"Environment variables set in the requested file are not visible to the
calling script." + "equivalent" changed to "similar".
Previous Comments:
------------------------------------------------------------------------
[2005-11-03 22:39:21] Christoph dot Freundl at cs dot fau dot de
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.
------------------------------------------------------------------------
[2005-11-03 21:48:24] derick@php.net
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: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