ID:               15438
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Verified
 Bug Type:         Scripting Engine problem
 Operating System: FreeBSD/Linux
 PHP Version:      4CVS-2002-10-14
 New Comment:

I still don't understand what the problem is. includee() and friends
are supposed to return whatever you return from within the included
file. It's not supposed to return true or false.
If you have a concrete reproducing script which doesn't work the way I
mentioned please post it and email it to me ([EMAIL PROTECTED])


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

[2002-10-14 17:51:04] [EMAIL PROTECTED]

> Updated Version

The include*/require* functions are a bit inconsistent.

In the simple tests done, the filename printed after "Running" is the
statement included in the source and executed by PHP, e.g.
var_dump(require("file2include"));

Every script ran exeutes the same statement twice in a row.

First tests done by including the following:
<?php
        echo "File got included\n";
?>

--> Running include.php
File got included
int(1)
File got included
int(1)

--> Running include_once.php
File got included
int(1)
bool(true)

--> Running require.php
File got included
UNKNOWN:0
File got included
UNKNOWN:0

--> Running require_once.php
File got included
int(1)
bool(true)



Same tests ran with:
<?php
        echo "File got included\n";
        return "Returning a string";
?>

--> Running include.php
File got included
string(18) "Returning a string"
File got included
string(18) "Returning a string"

--> Running include_once.php
File got included
string(18) "Returning a string"
bool(true)

--> Running require.php
File got included
UNKNOWN:0
File got included
UNKNOWN:0

--> Running require_once.php
File got included
string(18) "Returning a string"
bool(true)

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

[2002-10-08 06:29:23] [EMAIL PROTECTED]

confirmed with 4.4.0-dev (cli)/ ZE 1.4.0. i'm including a repro recipe


# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#       foo.php
#       bar.inc
#
echo x - foo.php
sed 's/^X//' >foo.php << 'END-of-foo.php'
X#!/usr/bin/env php
X<?
X
X    if (include('bar.inc') == true) {
X        print "1. ok\n";
X    }
X
X    if (true == include('bar.inc')) {
X        print "2. ok\n";
X    }
X
X    $rv = include('bar.inc');
X    if (true == $rv) {
X        print "3. ok\n";
X    }
END-of-foo.php
echo x - bar.inc
sed 's/^X//' >bar.inc << 'END-of-bar.inc'
X<?
X    print "Hello world\n";
X
END-of-bar.inc
exit



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

[2002-10-08 06:02:46] [EMAIL PROTECTED]

I already forgot about this bug, but received the email today that this
was considered bugus.
Well i'm surprised, and tested it a few times more (with a newer php
version), and i'm still convinced that this is a bug.

A few new examples:

<?
if( include("include.txt") == true )
{
   print "File included\n";
}
?>

The code above returns this fatal error:

Warning: Failed opening '1' for inclusion
(include_path='.:/usr/local/lib/php') in
/usr/local/apache/htdocs/test.php on line 2


And now i do it the longer way:
<?
$status = include("include.txt");

if( $status == true )
{
   printf("File included!\n");
}
?>

Works perfectly

And another way that works:

<?
if( true == include("include.txt") )
{
   print "File included\n";
}
?>


The problem really seems what [EMAIL PROTECTED] said, a scripting engine
bug. 

PS. Your reply about me asking a support question here is rather weird
to me, i was just reporting a bug..

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

[2002-10-07 22:17:06] [EMAIL PROTECTED]

Sorry, but the bug system is not the appropriate forum for asking
support questions. Your problem does not imply a bug in PHP itself.
For a list of more appropriate places to ask for help using PHP,
please visit http://www.php.net/support.php

Thank you for your interest in PHP.

You can only check if include/include_once failed or succeeded if the
included file returns a value. This is clearly documented at:
http://www.php.net/manual/en/function.include.php

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

[2002-02-09 06:17:06] [EMAIL PROTECTED]

I'm not sure this is actually a bug. I gather the returned value from
an include is the one you specify in the included file with 'return
$var'
Read more at http://www.php.net/manual/en/function.include.php about
return() in included files.

If you want to evaluate if an include was succesfull you could add:

$var = true;
return $var

at the end of the included file, but this should also do the trick:

((int) @include_once("../lib/test.php")) or die("Don't exist");

which is probably just a check if there's some warning text just like
michael already demonstrated.

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/15438

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

Reply via email to