ID: 15438
Updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
Status: Open
Bug Type: Scripting Engine problem
Operating System: FreeBSD/Linux
PHP Version: 4.1.1 and 4.2.3
New Comment:
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
Previous Comments:
------------------------------------------------------------------------
[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.
------------------------------------------------------------------------
[2002-02-08 10:51:58] [EMAIL PROTECTED]
Actually you can check if an include failed or not like this, but I
think the parser gets confused if you use the '== false'.
Making this a scripting engine problem.
Derick
------------------------------------------------------------------------
[2002-02-08 09:48:32] [EMAIL PROTECTED]
RTM! You can't include_once check for succes on include/include_once.
include(_once) is not a function.
------------------------------------------------------------------------
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