Dear all,
Hi. I'm new to this list. I searched the list archive and couldn't
find an answer. I'm sorry if someone has asked before.
I found that include_path seems to have a hidden fall back that's
not documented anywhere. It seems to always look for files in the
calling files' own directory. The below is a piece of terminal log of a
simple test case I produced for this. The include_path does not include
/tmp/phpinc/inc, but PHP can still find /tmp/phpinc/inc/inc02.php from
/tmp/phpinc/inc/inc01.php solely with the name inc02.php.
[EMAIL PROTECTED] /tmp/phpinc % find -type f
./test.php
./inc/inc02.php
./inc/inc01.php
[EMAIL PROTECTED] /tmp/phpinc % cat test.php
<?php
set_include_path(dirname(__FILE__));
echo "include_path is \"" . get_include_path() . "\".\n";
echo "This is " . __FILE__ . ".\n";
include "inc/inc01.php";
?>
[EMAIL PROTECTED] /tmp/phpinc % cat inc/inc01.php
<?php
echo "This is " . __FILE__ . ".\n";
include "inc02.php";
?>
[EMAIL PROTECTED] /tmp/phpinc % cat inc/inc02.php
<?php echo "This is " . __FILE__ . ".\n"; ?>
[EMAIL PROTECTED] /tmp/phpinc % php test.php
include_path is "/tmp/phpinc".
This is /tmp/phpinc/test.php.
This is /tmp/phpinc/inc/inc01.php.
This is /tmp/phpinc/inc/inc02.php.
[EMAIL PROTECTED] /tmp/phpinc %
I traced into the PHP source. At line 1348 in the subroutine
_php_stream_fopen_with_path() in main/streams/plain_wrapper.c, there is
a piece of code saying that:
...
/* check in provided path */
/* append the calling scripts' current working directory
* as a fall back case
*/
if (zend_is_executing(TSRMLS_C)) {
...
I cannot find the reason of this fall back anywhere on the net. I
have a lot of scripts that "accidently" works because of this, which I
do not know whether I should fix it or not. Can I rely on this
undocumented behavior? Or will this be fixed in the future, so I had
better fix my scripts in advance?
Thank you for your time in advance.
--
imacat ^_*'
[EMAIL PROTECTED]
PGP Key: http://www.imacat.idv.tw/me/pgpkey.asc
Tavern IMACAT's http://www.imacat.idv.tw/
Woman's Voice http://www.wov.idv.tw/
TLUG List Manager http://www.linux.org.tw/mailman/listinfo/tlug
pgpV61lgklNy1.pgp
Description: PGP signature

