[PHP-DEV] Bug #11326 Updated: Troubles with nested include()'s (bug #9673 revisited)

2001-07-16 Thread zeev

ID: 11326
Updated by: zeev
Reported By: [EMAIL PROTECTED]
Old Status: Open
Status: Closed
Bug Type: Scripting Engine problem
Operating System: Debian GNU/Linux
PHP Version: 4.0.5
New Comment:

From now on (CVS/4.0.7), include() will also look in the directory of the currently 
executing file.  This should give you the functionality you asked for.



Previous Comments:


[2001-06-15 07:05:07] [EMAIL PROTECTED]

Just to see that I understand correctly, will the following userland function solve 
the problem?

function my_include($file)
{
$orig_dir = getcwd();
chdir(dirname($file));
$retval = include(./.basename($file));
chdir($orig_dir);
return $retval;
}

If so, you can simply use this solution in the meantime.  We may want to change PHP to 
use this behavior, but if we do, it'd have to happen in a major version, because it's 
a major change.



[2001-06-14 14:33:30] [EMAIL PROTECTED]

*OOPS* After submitting this bug, the next day I realized 
my argument flaw about what I called the server side 
path (which is actually the client side path, as 
[EMAIL PROTECTED] pointed out). Please disregard it, I 
don't know what I was thinking ;-)

However, I still stand very firm on the idea that php 
needs to change its implementation of included files.




[2001-06-13 17:26:48] [EMAIL PROTECTED]

Without addressing the server-side issues, I'll point out
why the client side ones are almost certain not to change.

script src=js/myscript.js and img src=images/php_logo.gif
are both ignored by the PHP interpreter.

The browser (Which will be processing the tags) does not
konw PHP was involved in the document's creation.

 Of course, the image is not showing up because the server
 thinks it is located at /images/php_logo.gif. When it is
 really located at /b/images/php_logo.gif!

As mentioned above, the server isn't thinking anything
about the image.  The browser thinks it's in the images
subdirectory, relative to the path of the html page it's
parsing.  The fact that this img tag came from a file
that's in a subdirectory (On the server) wouldn't be
relevant even if PHP was changing the working directory as
you want it to, because PHP won't be interpreting the html
code (Nor should it).



[2001-06-07 07:16:26] [EMAIL PROTECTED]

Please do not immediately file this bug as a duplicate of 
#9673. Although my bug's goal is reporting the same 
problem, it appears that #9673 was last 'Anylized' three 
months ago with no reply to the last comment made by the 
bug's author.

PHP desperately needs a way to do nested includes, 
preserving not only php relative paths transparently, but 
server side paths as well. By server side path, I am 
refering to script src=js/myscript.js and img 
src=images/myimage.gif. Currently, if one includes a 
file by means of include(), include_once(), etc., the 
working directory of the included file, no matter where it 
is located, is of the calling file. One can circumvent 
this obstacle a couple of ways. The easiest appears to be 
the method of changing one's working directory as you move 
into an included file. Of course, one must always remember 
to change the working directory back to the original 
location after the file has been included.

Unfortunately, this work around breaks down when one 
wishes to use server side paths in an included file. 
Although the working directory has been changed, the 
server working directory is the same. The following is an 
example that completely illustrates the problem.

EXAMPLE DIRCTORY STUCTURE:
/ -- a.php
/b/ -- b1.php
/b/ -- b2.php
/b/images/ -- php_logo.gif


BUG:
/*-- /a.php --*/
print( pa.php  . getcwd() . /p);
include_once( b/b1.php );

/*-- /b/b1.php --*/
print( pb1.php  . getcwd() . /p );
include_once( b2.php );

/*-- /b/b2.php --*/
print( pb2.php  . getcwd() . /p );
print( img src=images/php_logo.gif );

ACCESS: http://server/a.php
RESULT:
a.php /
b1.php /
Warning: Failed opening 'b2.php' for inclusion
(include_path='.:/usr/lib/php4') in
/b/b1.php on line 3

WORK AROUND:
/*-- /a.php --*/
print( pa.php  . getcwd() . /p);
chdir( b );
include_once( b1.php );
chdir( .. );

/*-- /b/b1.php --*/
print( pb1.php  . getcwd() . /p );
include_once( b2.php );

/*-- /b/b2.php --*/
print( pb2.php  . getcwd() . /p );
print( img src=images/php_logo.gif );

ACCESS: http://server/a.php
RESULT:
a.php 

[PHP-DEV] Bug #11326 Updated: Troubles with nested include()'s (bug #9673 revisited)

2001-06-19 Thread zeev

ID: 11326
Updated by: zeev
Reported By: [EMAIL PROTECTED]
Status: Open
Bug Type: Scripting Engine problem
Operating system: 
PHP Version: 4.0.5
Assigned To: 
Comments:

Just to see that I understand correctly, will the following userland function solve 
the problem?

function my_include($file)
{
$orig_dir = getcwd();
chdir(dirname($file));
$retval = include(./.basename($file));
chdir($orig_dir);
return $retval;
}

If so, you can simply use this solution in the meantime.  We may want to change PHP to 
use this behavior, but if we do, it'd have to happen in a major version, because it's 
a major change.

Previous Comments:
---

[2001-06-14 14:33:30] [EMAIL PROTECTED]
*OOPS* After submitting this bug, the next day I realized 
my argument flaw about what I called the server side 
path (which is actually the client side path, as 
[EMAIL PROTECTED] pointed out). Please disregard it, I 
don't know what I was thinking ;-)

However, I still stand very firm on the idea that php 
needs to change its implementation of included files.


---

[2001-06-13 17:26:48] [EMAIL PROTECTED]
Without addressing the server-side issues, I'll point out
why the client side ones are almost certain not to change.

script src=js/myscript.js and img src=images/php_logo.gif
are both ignored by the PHP interpreter.

The browser (Which will be processing the tags) does not
konw PHP was involved in the document's creation.

 Of course, the image is not showing up because the server
 thinks it is located at /images/php_logo.gif. When it is
 really located at /b/images/php_logo.gif!

As mentioned above, the server isn't thinking anything
about the image.  The browser thinks it's in the images
subdirectory, relative to the path of the html page it's
parsing.  The fact that this img tag came from a file
that's in a subdirectory (On the server) wouldn't be
relevant even if PHP was changing the working directory as
you want it to, because PHP won't be interpreting the html
code (Nor should it).

---

[2001-06-07 07:16:26] [EMAIL PROTECTED]
Please do not immediately file this bug as a duplicate of 
#9673. Although my bug's goal is reporting the same 
problem, it appears that #9673 was last 'Anylized' three 
months ago with no reply to the last comment made by the 
bug's author.

PHP desperately needs a way to do nested includes, 
preserving not only php relative paths transparently, but 
server side paths as well. By server side path, I am 
refering to script src=js/myscript.js and img 
src=images/myimage.gif. Currently, if one includes a 
file by means of include(), include_once(), etc., the 
working directory of the included file, no matter where it 
is located, is of the calling file. One can circumvent 
this obstacle a couple of ways. The easiest appears to be 
the method of changing one's working directory as you move 
into an included file. Of course, one must always remember 
to change the working directory back to the original 
location after the file has been included.

Unfortunately, this work around breaks down when one 
wishes to use server side paths in an included file. 
Although the working directory has been changed, the 
server working directory is the same. The following is an 
example that completely illustrates the problem.

EXAMPLE DIRCTORY STUCTURE:
/ -- a.php
/b/ -- b1.php
/b/ -- b2.php
/b/images/ -- php_logo.gif


BUG:
/*-- /a.php --*/
print( pa.php  . getcwd() . /p);
include_once( b/b1.php );

/*-- /b/b1.php --*/
print( pb1.php  . getcwd() . /p );
include_once( b2.php );

/*-- /b/b2.php --*/
print( pb2.php  . getcwd() . /p );
print( img src=images/php_logo.gif );

ACCESS: http://server/a.php
RESULT:
a.php /
b1.php /
Warning: Failed opening 'b2.php' for inclusion
(include_path='.:/usr/lib/php4') in
/b/b1.php on line 3

WORK AROUND:
/*-- /a.php --*/
print( pa.php  . getcwd() . /p);
chdir( b );
include_once( b1.php );
chdir( .. );

/*-- /b/b1.php --*/
print( pb1.php  . getcwd() . /p );
include_once( b2.php );

/*-- /b/b2.php --*/
print( pb2.php  . getcwd() . /p );
print( img src=images/php_logo.gif );

ACCESS: http://server/a.php
RESULT:
a.php /var/www/php_work_around
b1.php /var/www/php_work_around/b
b2.php /var/www/php_work_around/b
[image not found]

Of course, the image is not showing up because the server 
thinks it is located at /images/php_logo.gif. When it is 
really located at /b/images/php_logo.gif!


[PHP-DEV] Bug #11326 Updated: Troubles with nested include()'s (bug #9673 revisited)

2001-06-19 Thread cardinal

ID: 11326
Updated by: cardinal
Reported By: [EMAIL PROTECTED]
Status: Open
Bug Type: Scripting Engine problem
Operating system: 
PHP Version: 4.0.5
Assigned To: 
Comments:

Without addressing the server-side issues, I'll point out
why the client side ones are almost certain not to change.

script src=js/myscript.js and img src=images/php_logo.gif
are both ignored by the PHP interpreter.

The browser (Which will be processing the tags) does not
konw PHP was involved in the document's creation.

 Of course, the image is not showing up because the server
 thinks it is located at /images/php_logo.gif. When it is
 really located at /b/images/php_logo.gif!

As mentioned above, the server isn't thinking anything
about the image.  The browser thinks it's in the images
subdirectory, relative to the path of the html page it's
parsing.  The fact that this img tag came from a file
that's in a subdirectory (On the server) wouldn't be
relevant even if PHP was changing the working directory as
you want it to, because PHP won't be interpreting the html
code (Nor should it).

Previous Comments:
---

[2001-06-07 07:16:26] [EMAIL PROTECTED]
Please do not immediately file this bug as a duplicate of 
#9673. Although my bug's goal is reporting the same 
problem, it appears that #9673 was last 'Anylized' three 
months ago with no reply to the last comment made by the 
bug's author.

PHP desperately needs a way to do nested includes, 
preserving not only php relative paths transparently, but 
server side paths as well. By server side path, I am 
refering to script src=js/myscript.js and img 
src=images/myimage.gif. Currently, if one includes a 
file by means of include(), include_once(), etc., the 
working directory of the included file, no matter where it 
is located, is of the calling file. One can circumvent 
this obstacle a couple of ways. The easiest appears to be 
the method of changing one's working directory as you move 
into an included file. Of course, one must always remember 
to change the working directory back to the original 
location after the file has been included.

Unfortunately, this work around breaks down when one 
wishes to use server side paths in an included file. 
Although the working directory has been changed, the 
server working directory is the same. The following is an 
example that completely illustrates the problem.

EXAMPLE DIRCTORY STUCTURE:
/ -- a.php
/b/ -- b1.php
/b/ -- b2.php
/b/images/ -- php_logo.gif


BUG:
/*-- /a.php --*/
print( pa.php  . getcwd() . /p);
include_once( b/b1.php );

/*-- /b/b1.php --*/
print( pb1.php  . getcwd() . /p );
include_once( b2.php );

/*-- /b/b2.php --*/
print( pb2.php  . getcwd() . /p );
print( img src=images/php_logo.gif );

ACCESS: http://server/a.php
RESULT:
a.php /
b1.php /
Warning: Failed opening 'b2.php' for inclusion
(include_path='.:/usr/lib/php4') in
/b/b1.php on line 3

WORK AROUND:
/*-- /a.php --*/
print( pa.php  . getcwd() . /p);
chdir( b );
include_once( b1.php );
chdir( .. );

/*-- /b/b1.php --*/
print( pb1.php  . getcwd() . /p );
include_once( b2.php );

/*-- /b/b2.php --*/
print( pb2.php  . getcwd() . /p );
print( img src=images/php_logo.gif );

ACCESS: http://server/a.php
RESULT:
a.php /var/www/php_work_around
b1.php /var/www/php_work_around/b
b2.php /var/www/php_work_around/b
[image not found]

Of course, the image is not showing up because the server 
thinks it is located at /images/php_logo.gif. When it is 
really located at /b/images/php_logo.gif!

In bug #9673, on 2001-03-15 09:08:11 [EMAIL PROTECTED] writes 
Now, all relative pathes are resolved against the current 
directory of the including script (which is the directory 
where it's located). This is a known issue. Use 
include_pathes in the meantime.

Unfortunately, three months later This is [still] a known 
issue and [EMAIL PROTECTED] is still correct!


---



ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=11326edit=2


-- 
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




[PHP-DEV] Bug #11326 Updated: Troubles with nested include()'s (bug #9673 revisited)

2001-06-18 Thread joschlec

ID: 11326
User Update by: [EMAIL PROTECTED]
Status: Open
Bug Type: Scripting Engine problem
Operating system: Debian GNU/Linux
PHP Version: 4.0.5
Description: Troubles with nested include()'s (bug #9673 revisited)

*OOPS* After submitting this bug, the next day I realized 
my argument flaw about what I called the server side 
path (which is actually the client side path, as 
[EMAIL PROTECTED] pointed out). Please disregard it, I 
don't know what I was thinking ;-)

However, I still stand very firm on the idea that php 
needs to change its implementation of included files.


Previous Comments:
---

[2001-06-13 17:26:48] [EMAIL PROTECTED]
Without addressing the server-side issues, I'll point out
why the client side ones are almost certain not to change.

script src=js/myscript.js and img src=images/php_logo.gif
are both ignored by the PHP interpreter.

The browser (Which will be processing the tags) does not
konw PHP was involved in the document's creation.

 Of course, the image is not showing up because the server
 thinks it is located at /images/php_logo.gif. When it is
 really located at /b/images/php_logo.gif!

As mentioned above, the server isn't thinking anything
about the image.  The browser thinks it's in the images
subdirectory, relative to the path of the html page it's
parsing.  The fact that this img tag came from a file
that's in a subdirectory (On the server) wouldn't be
relevant even if PHP was changing the working directory as
you want it to, because PHP won't be interpreting the html
code (Nor should it).

---

[2001-06-07 07:16:26] [EMAIL PROTECTED]
Please do not immediately file this bug as a duplicate of 
#9673. Although my bug's goal is reporting the same 
problem, it appears that #9673 was last 'Anylized' three 
months ago with no reply to the last comment made by the 
bug's author.

PHP desperately needs a way to do nested includes, 
preserving not only php relative paths transparently, but 
server side paths as well. By server side path, I am 
refering to script src=js/myscript.js and img 
src=images/myimage.gif. Currently, if one includes a 
file by means of include(), include_once(), etc., the 
working directory of the included file, no matter where it 
is located, is of the calling file. One can circumvent 
this obstacle a couple of ways. The easiest appears to be 
the method of changing one's working directory as you move 
into an included file. Of course, one must always remember 
to change the working directory back to the original 
location after the file has been included.

Unfortunately, this work around breaks down when one 
wishes to use server side paths in an included file. 
Although the working directory has been changed, the 
server working directory is the same. The following is an 
example that completely illustrates the problem.

EXAMPLE DIRCTORY STUCTURE:
/ -- a.php
/b/ -- b1.php
/b/ -- b2.php
/b/images/ -- php_logo.gif


BUG:
/*-- /a.php --*/
print( pa.php  . getcwd() . /p);
include_once( b/b1.php );

/*-- /b/b1.php --*/
print( pb1.php  . getcwd() . /p );
include_once( b2.php );

/*-- /b/b2.php --*/
print( pb2.php  . getcwd() . /p );
print( img src=images/php_logo.gif );

ACCESS: http://server/a.php
RESULT:
a.php /
b1.php /
Warning: Failed opening 'b2.php' for inclusion
(include_path='.:/usr/lib/php4') in
/b/b1.php on line 3

WORK AROUND:
/*-- /a.php --*/
print( pa.php  . getcwd() . /p);
chdir( b );
include_once( b1.php );
chdir( .. );

/*-- /b/b1.php --*/
print( pb1.php  . getcwd() . /p );
include_once( b2.php );

/*-- /b/b2.php --*/
print( pb2.php  . getcwd() . /p );
print( img src=images/php_logo.gif );

ACCESS: http://server/a.php
RESULT:
a.php /var/www/php_work_around
b1.php /var/www/php_work_around/b
b2.php /var/www/php_work_around/b
[image not found]

Of course, the image is not showing up because the server 
thinks it is located at /images/php_logo.gif. When it is 
really located at /b/images/php_logo.gif!

In bug #9673, on 2001-03-15 09:08:11 [EMAIL PROTECTED] writes 
Now, all relative pathes are resolved against the current 
directory of the including script (which is the directory 
where it's located). This is a known issue. Use 
include_pathes in the meantime.

Unfortunately, three months later This is [still] a known 
issue and [EMAIL PROTECTED] is still correct!


---


Full Bug description available at: http://bugs.php.net/?id=11326


-- 
PHP Development