ID: 15438 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] -Status: Open +Status: Verified Bug Type: Scripting Engine problem Operating System: FreeBSD/Linux PHP Version: 4CVS-2002-10-14
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