php include prints 1

echo include "foo.php"

should be

include 'foo.php';

Note that this can also happen when using include without the echo:

<?= include 'foo.php'; ?>

This will also print out the return value of 1 when used inside a script. To get rid of this you need to remove the '=' sign in the statement like so:

<? include 'foo.php'; ?>

PHP will now print out the contents of the file without the return value.


Okey so the answers here are actually not entirely correct; in some sense even misleading.

include takes the contents of the file and places them in context. One of the more common uses is to pass variable scope around, ie. passing scoped variables in your view by including them in the handler and using include on the view. Common, but there are also other uses; you can also return inside a included file.

Say you have a file like this:

<?php return array
    (
        'some',
        'php'
        'based'
        'configuration',
        'file'

    ); # config

Doing $config = include 'example-config-above.php'; is perfectly fine and you will get the array above in the $config variable.

If you try to include a file that doesn't have a return statement then you will get 1.

Gotcha Time

You might think that include 'example-config-above.php'; is actually searching for the file in the directory where the file calling the include is located, well it is, but it's also searching for the file in various other paths and those other paths have precedence over the local path!

So if you know you had a file like the above with a return inside it, but are getting 1 and potentially something like weird PEAR errors or such, then you've likely done something like this:

// on a lot of server setups this will load a random pear class
include 'system.php' 

Since it's loading a file with out a return you will get 1 instead of (in the case of our example) the configuration array we would be expecting.

Easy fix is of course:

include __DIR__.'/system.php' 

Let the file.txt contain xxx

 echo include("file.txt");

This returns, xxx1

The '1' is the return value of the include function, denoting the success that the file is accessed. Otherwise it returns nothing, in this case parse error is thrown.

  echo print "hello";

This too returns, hello1

Same as above; '1' denoting the success,it's printed.

echo echo "hello";
print echo "hello";

Both the above cases produces an error. Since the echo function has no return value, hence undefined.

echo  echo "hello";           print echo "hello";
(1st) (2nd)                     

Now the second 'echo' in the both cases produces an undefined.The first 'echo' or 'print' can't take in the hello output with the undefined (produced by the second echo).

A verification:

if((print "hello")==1)         
  echo "hey!";

 output: hellohey!    ('echo' in the 2nd line can be a print, it doesn't matter)

Similarly,

if((include ("file.txt"))==1)
echo "hey!";

output: xxxhey! 

Other hand,

if((echo "hello")==1)
echo "hey!";

output: an error

In the first two cases the functions (print and include) returned 1, in the third case 'echo' produces no return value (undefined) hence the third case produces an error.