Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

root path doesn't work with php include

People also ask

Why php include is not working?

You need to try the path of functions. php within the system and not its url. Do you have console access? If so just find out what directory is the file in and include it using the full path.

How do I refer to the root directory in php?

In order to get the root directory path, you can use _DIR_ or dirname(). echo dirname(__FILE__); Both the above syntaxes will return the same result.

HOW include php file in another directory?

The way I do it is visual. I put my mouse pointer on the index. php (looking at the file structure), then every time I go UP a folder, I type another "../" Then you have to make sure you go UP the folder structure ABOVE the folders that you want to start going DOWN into. After that, it's just normal folder hierarchy.

What is include path in php?

Files are included based on the file path given or, if none is given, the include_path specified. If the file isn't found in the include_path, include will finally check in the calling script's own directory and the current working directory before failing.


I'm assuming by root folder you mean your web document root, rather than filesystem root.

To that end, you can either

  • add the web root folder to the include path, and include('example/example.php')
  • or you can include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')

I had this issue too. Paul Dixon's answer is correct, but maybe this will help you understand why:

The issue here is that PHP is a server side language. Where pure HTML documents can access files based on the root url you set up on the server (ie. to access an image from any sub-directory you're on you would use /images/example.jpg to go from the top directory down), PHP actually accesses the server root when you use include (/images/example.jpg)

The site structure that you have set up actually lies within a file system in the Apache Server. My site root looks something like this, starting from the server root and going down:

/home2/siteuserftp/public_html/test/

"test" represents your site root

So to answer your question why your PHP include isn't getting the result you want (it is working exactly as it should) is because you're asking the PHP code to try and find your file at the server root, when it is actually located at the HTML root of your site which would look something like the above.

Your file would be based on the site root of "test/" and would look something like this:

/home2/siteuserftp/public_html/test/about/index.php

The answer Paul Dixon provided:

include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')

is exactly what will fix your problem (don't worry about trying to find the document root to replace 'DOCUMENT_ROOT', PHP will do it for you. Just make sure you have 'DOCUMENT_ROOT' literally in there)

EDIT:

More information DOCUMENT_ROOT and other PHP SERVER variables can be found here


include() (and many other functions like require(), fopen(), etc) all work off the local filesystem, not the web root.

So, when you do something like this

include( "/example/example.php" );

You're trying to include from the root of your *nix machine.

And while there are a multitude of ways to approach what you're doing, Paul Dixon's suggestions are probably your best bets.


Every web server has a public_html folder, in which you usually keep your files etc. By using /, you will not get to public_html, instead you direct towards the main (unaccesible) root. So, use $_SERVER['DOCUMENT_ROOT']."/your/locati.on" instead


I solved this on a machine running Windows and IIS with the following:

<?php
  $docroot = 'http://www.example.com/';
  include ($docroot.'inc-header.php');
?>

If you're on a local dev machine, you can force your domain to point to localhost by adding the following in C:\Windows\System32\drivers\etc\hosts

127.0.0.1   www.example.com

Also, you'll need to enable allow_url_include in php.ini like so

allow_url_include = On