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

Attachment: pgpV61lgklNy1.pgp
Description: PGP signature

Reply via email to