简体   繁体   中英

Is it possible to detect when php file is included?

So in file first.php I will include file original.php with include_once .

Problem occurs, when I try to call functions which are inside original.php and that file is not loading if there is no user session.

Basicaly I'm include file original.php in which are few functions im calling later in first.php , but those functions are inaccesible due to restrictions I've set in original.php , but now I want to add rule to original.php to allow such requests from first.php or any other PHP file that will include original.php ...

I wonder what could I do in this case OR could I simply add some if clause to original.php , like:

if($fileIncluded == 'yes')
{
   // do not check if user session exist etc.
}
else
{
   // check for user session
}

Thanks for ideas and help in advance!

You can set a constant in the file to be included like so:

In original.php :

define('ORIGINAL_INCLUDED', TRUE);

Then in first.php you check if the constant exists:

if (defined('ORIGINAL_INCLUDED'))
{
    // do not check if user session exist etc.
}
else
{
    // check for user session
}

Unlike get_included_files() this will work when a script includes a script. get_included_files() will only return the files included in the main script, but not scripts included in child scripts.

Or in original.php :

if ('original.php' == basename(__FILE__))
{
    // original.php directly accessed
}
else
{
    // original.php included instead
}

PHP provides a get_included_files function that would seem to work in this scenario.

if in_array('file.php', get_included_files()) {
    /* ... */
}

Well, I am PHP newbie, but I would do

$add_file = require(file.php);

and then do

if($add_file) {echo "file is aded";} else {echo "file is not added";}

You could use the function get_included_files() or set a variable like this:

  // includedfile.php
 $variable = true;

 //index.php
 include 'includedfile.php';

 if(isset($variable)) {
     // file included
 } else {
     // not included
 }

You could also define a constant, and check if it is defined later. Use define and defined functions for that. I think it's better than using normal variables.

Php doc: http://ch2.php.net/manual/en/function.defined.php and http://ch2.php.net/manual/en/function.define.php

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM