Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Proper way to set PHP include path for *Nix and Windows

Is this the proper way to define an include path for both *nix and Windows?

define( 'INCPATH', realpath( dirname( __FILE__ ) ) . '/' );

Note the trailing forward-slash I included above. Is the forward-slash for includes/requires the same for both OS's, as well?

EDIT (UPDATED WITH ANSWER):

From what I can gather, my code below is the proper way to universally define an include/require path for both *nix and Windows OS's. Feel free to correct anything in the comments below.

The thing that confused me were the many examples I saw showing replacement of back-slashes (\) into forward-slashes(/). Based on some of the answers below, this is unnecessary.

So the final correct code (for the purist) is:

define( 'INCPATH', realpath( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR );

That code produces the following results:

*nix: /path/to/the/file/

Windows: C:\Path To\the\file\

A brief explanation, working our way from the inside (__FILE__) out (realpath()):

FILE The full path and filename of the file. Always contains an absolute path with symlinks resolved.

dirname() The returned string is path with any trailing /component removed. Responsible for removing the filename.

realpath() Returns the canonicalized (normalized/standardized) absolute pathname on success. The resulting path will have no symbolic link, '/./' or '/../' components. I assume this is included for thoroughness because __FILE__ already resolves symlinks. Or maybe it's included to resolve relative paths? Either way, it seems to solidify our goal.

like image 515
Jeff Avatar asked Dec 24 '09 21:12

Jeff


3 Answers

Forward slashes will work for both OS's, and it's the way to go.

I couldn't find an absolute reference to this, but it's indicated in several places in the PHP manual, like here and here. And, it works for me, a Windows & Linux user.

Lastly, you may end up specifying mixed-paths on Windows, like c:\\apache\\htdocs\\myapp/index.php, and that all works fine.

like image 125
Derek Illchuk Avatar answered Sep 19 '22 11:09

Derek Illchuk


Alternatively you can use PHP's predefined constant DIRECTORY_SEPARATOR, which will give you the OS-specific directory delimiter. See http://www.php.net/manual/en/dir.constants.php also.

like image 35
Decent Dabbler Avatar answered Sep 22 '22 11:09

Decent Dabbler


To many people's surprise, / works fine on Windows—and MSDOS. Within pathnames, it works even on OpenVMS.

However, if you are doing something within PHP for paths, an array would be a more convenient structure than a string.

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib');
like image 21
wallyk Avatar answered Sep 23 '22 11:09

wallyk