Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

relative path in require_once doesn't work

I have the following structure

otsg  > class    > authentication.php    > database.php    > user.php  > include    > config.inc.php    > encryption.php    > include.php    > session.php  > index.php  > registration.php 

include.php file has the following

ini_set('display_errors', 1); error_reporting(E_ALL);  ini_set('include_path',ini_get('include_path').':/Applications/MAMP/htdocs/otsg/:'); require_once 'config.inc.php'; require_once '../class/database.php'; require_once '../class/user.php'; require_once 'encryption.php'; require_once 'session.php'; require_once '../class/authentication.php'; 

and in the index.php page I had included

require_once 'include/include.php'; 

When I open the page index.php I get the following warning and fatal error. I don't understand what causes this error. When I gave the absolute path it works. But absolute path is not a good idea i believe.

Warning: require_once(../class/database.php) [function.require-once]: failed to open stream: No such file or directory in /Applications/MAMP/htdocs/otsg/include/include.php on line 9  Fatal error: require_once() [function.require]: Failed opening required '../class/database.php' (include_path='.:/Applications/MAMP/bin/php5.3/lib/php:/Applications/MAMP/htdocs/otsg/include/:') in /Applications/MAMP/htdocs/otsg/include/include.php on line 9 

Thanks in advance

like image 474
user525146 Avatar asked Mar 20 '11 22:03

user525146


People also ask

How to require_ once in PHP?

The require_once keyword is used to embed PHP code from another file. If the file is not found, a fatal error is thrown and the program stops. If the file was already included previously, this statement will not include it again.

What is the main difference between require () and require_once ()?

The require() function is used to include a PHP file into another irrespective of whether the file is included before or not. The require_once() will first check whether a file is already included or not and if it is already included then it will not include it again.

What is the difference between require once and include in PHP?

The require() function will stop the execution of the script when an error occurs. The include() function does not give a fatal error. The include() function is mostly used when the file is not required and the application should continue to execute its process when the file is not found.


2 Answers

Use

__DIR__ 

to get the current path of the script and this should fix your problem.

So:

require_once(__DIR__.'/../class/user.php'); 

This will prevent cases where you can run a PHP script from a different folder and therefore the relatives paths will not work.

Edit: slash problem fixed

like image 118
Raisen Avatar answered Oct 13 '22 19:10

Raisen


for php version 5.2.17 __DIR__ will not work it will only works with php 5.3

But for older version of php dirname(__FILE__) perfectly

For example write like this

require_once dirname(__FILE__) . '/db_config.php'; 
like image 44
Mobile Tech. Avatar answered Oct 13 '22 18:10

Mobile Tech.