Find home directory php

getcwd

Возвращает текущий рабочий каталог в случае успешного выполнения или false в случае ошибки.

На некоторых вариантах Unix getcwd() вернёт false , если на каком-либо из родительских каталогов не установлен режим чтения или поиска, даже если он установлен на текущем каталоге. Больше информации о режимах доступа смотрите в документации функции chmod() .

Примеры

Пример #1 Пример использования getcwd()

// текущий каталог
echo getcwd () . «\n» ;

// текущий каталог
echo getcwd () . «\n» ;

Результатом выполнения данного примера будет что-то подобное:

Если PHP-интерпретатор собран с поддержкой ZTS (Zend Thread Safety), текущий рабочий каталог, возвращаемый getcwd() , может отличаться от того, что возвращают интерфейсы операционной системы. Буду задействованы внешние библиотеки (подключённые через FFI), использующие текущий рабочий каталог.

Смотрите также

User Contributed Notes 20 notes

getcwd() returns the path of the «main» script referenced in the URL.

dirname(__FILE__) will return the path of the script currently executing.

I had written a script that required several class definition scripts from the same directory. It retrieved them based on filename matches and used getcwd to figure out where they were.

Didn’t work so well when I needed to call that first script from a new file in a different directory.

given a link
/some/link->/some/location/path

with linux bash,
if within the linked drawer /some/link
cd .. goes upper link /some/
cd -P .. goes upper destination /some/location/

with php
fopen («../file») goes upper destination /some/location/file

some others commented about ways obtaining the path below.

I found some luck with using $_SERVER[‘DOCUMENT_ROOT’] instead
to recraft an absolute path.

getcwd() appears to call the equivalent of PHP’s realpath() on the path. It never returns symlinks, but always the actual directory names in the path to the current working directory.

When running PHP on the command line, if you want to include another file which is in the same directory as the main script, doing just
include ‘./otherfile.php’ ;
?>
might not work, if you run your script like this:
/$ /path/to/script.php
because the current working dir will be set to ‘/’, and the file ‘/otherfile.php’ does not exist, because it is in ‘/path/to/otherfile.php’.
So, to get the directory in which the script resides, you can use this function:
function get_file_dir () global $argv ;
$dir = dirname ( getcwd () . ‘/’ . $argv [ 0 ]);
$curDir = getcwd ();
chdir ( $dir );
$dir = getcwd ();
chdir ( $curDir );
return $dir ;
>
?>
So you can use it like this:
include get_file_dir () . ‘/otherfile.php’ ;
// or even..
chdir ( get_file_dir ());
include ‘./otherfile.php’ ;
?>
Spent some time thinking this one out, maybe it helps someone 🙂

I use this code to replicate the pushd and popd DOS commands in PHP:

$g_DirStack = array();
function pushd ( $dir )
global $g_DirStack ;
array_push ( $g_DirStack , getcwd () );
chdir ( $dir );
>
function popd ( )
global $g_DirStack ;
$dir = array_pop ( $g_DirStack );
assert ( $dir !== null );
chdir ( $dir );
>
?>

This allows you to change the current directory with pushd, then use popd to «undo» the directory change when you’re done.

This function is often used in conjuction with basename(), i.e.
http://www.php.net/manual/en/function.basename.php

Some server’s has security options to block the getcwd()

«On some Unix variants, getcwd() will return FALSE if any one of the parent directories does not have the readable or search mode set, even if the current directory does.»

Just so you know, MacOS X is one of these variants (at least 10.4 is for me). You can make it work by applying ‘chmod a+rx’ to all folders from your site folder upwards.

This is a function to convert a path which looks something like this:

To a proper directory path:

function simplify_path ( $path )

//saves our current working directory to a variable
$oldcwd = getcwd ();
//changes the directory to the one to convert
//$path is the directory to convert (clean up), handed over to the //function as a string

chdir ( $path );
return gstr_replace ( ‘\\’ , ‘/’ , getcwd ());

//change the cwd back to the old value to not interfere with the script
chdir ( $oldcwd );

This function is really useful if you want to compare two filepaths which are not necesarily in a «cleaned up» state . It works in * NIX and WINDOWS alike

if you link your php to /bin/linkedphp and your php is at for ex /home/actual.php

when you run linkedphp in somewhere in your filesystem,
getcwd returns /bin instead of working dir,

solution: use dirname(__FILENAME__) instead

It appears there is a change in functionality in PHP5 from PHP4 when using the CLI tool. Here is the example: —

PHP4 returns /tmp
PHP5 returns /

Take care if you use getcwd() in file that you’ll need to include (using include, require, or *_once) in a script located outside of the same directory tree.

example:
//in /var/www/main_document_root/include/MySQL.inc.php
if ( strpos ( getcwd (), ‘main_’ )> 0 ) //code to set up main DB connection
>
?>

//in home/cron_user/maintenance_scripts/some_maintenance_script.php
require_once ( ‘/var/www/main_document_root/include/MySQL.inc.php’ );
?>

In the above example, the database connection will not be made because the call to getcwd() returns the path relative to the calling script ( /home/cron_user/maintenance_scripts ) NOT relative to the file where the getcwd() function is called.

Be aware when calling getcwd() in directories consisting of symlinks.

getcwd() is the equivalent of shell command «pwd -P» which resolves symlinks.

The shell command «pwd» is the equivalent of «pwd -L» which uses PWD from the environment without resolving symlinks. This is also the equivalent of calling getenv(‘PWD’).

As you could read in
http://www.php.net/manual/en/features.commandline.differences.php
the CLI SAPI does — contrary to other SAPIs — NOT automatically change the current working directory to the one the started script resides in.

A very simple workaround to regain the behaviour you’re used to from your «ordinary» webpage scripting is to include something like that at the beginning of your script:

chdir ( dirname ( __FILE__ ) );
?>

But because this is about reading or «finding» pathes, you might appreciate it if I share some more sophisticated tricks I frequently use in CLI scripts .

// Note: all pathes stored in subsequent Variables end up with a DIRECTORY_SEPARATOR

// how to store the working directory «from where» the script was called:
$initial_cwd = preg_replace ( ‘~(\w)$~’ , ‘$1’ . DIRECTORY_SEPARATOR , realpath ( getcwd () ) );

// how to switch symlink-free to the folder the current file resides in:
chdir ( dirname ( realpath ( __FILE__ ) ) );

// how to store the former folder in a variable:
$my_folder = dirname ( realpath ( __FILE__ ) ) . DIRECTORY_SEPARATOR ;

// how to get a path one folder up if $my_folder ends with \class\ or /class/ :
$my_parent_folder = preg_replace ( ‘~[/\\\\]class[/\\\\]$~’ , DIRECTORY_SEPARATOR , $my_folder );

// how to get a path one folder up in any case :
$my_parent_folder = preg_replace ( ‘~[/\\\\][^/\\\\]*[/\\\\]$~’ , DIRECTORY_SEPARATOR , $my_folder );

// how to make an array of OS-style-pathes from an array of unix-style-pathes
// (handy if you use config-files or so):
foreach( $unix_style_pathes as $unix_style_path )
$os_independent_path [] = str_replace ( ‘/’ , DIRECTORY_SEPARATOR , $unix_style_path );

Источник

Find Root Directory Path in PHP

Find Root Directory Path in PHP

  1. Use the __DIR__ Predefined Constant to Find the Path of the Directory of a File in PHP
  2. Use the dirname() Function to Find the Path of the Root Directory of a Project in PHP
  3. Use $_SERVER[‘DOCUMENT_ROOT’] to Find the Document Root Directory of a File in PHP

We will introduce different methods to find the path of the root directory of a PHP project.

Use the __DIR__ Predefined Constant to Find the Path of the Directory of a File in PHP

In PHP, there are predefined constants that can be used to achieve various functionalities. __DIR__ is one magical constant that returns the complete file path of the current file from the root directory. It means it will return the file’s directory. dirname(__FILE__) can also be used for the same purpose.

Suppose we have a project folder which is the root directory of the project. The project folder has the following file path /var/www/HTML/project . Inside the project folder, we have the index.php file and another folder master . Inside the master folder, we have two PHP files: login.php and register.php .

project ├── index.php └── master  ├── login.php  └── register.php 

Suppose we are currently working on login.php . In such a file structure, we can get the directory’s path using the __DIR__ constant in the login.php file. We can use the echo function to print the constant.

Use the dirname() Function to Find the Path of the Root Directory of a Project in PHP

The function dirname(__FILE__) is similar to __DIR__ . We can find the path of the directory of a file using this function. We can also move to the upper levels in the file path using the dirname() function. The first parameter of the function is the path of the file, which is denoted by the __FILE__ constant. The second parameter is an integer which is called levels. We can set the levels to direct the function to level up in the file path. The default value of the level is 1 . As we increase the level, the function will get the file path of one level up. So, we can use this function to find the exact file path of the project’s root directory in PHP.

For example, we can consider the file structure as the first method. Working from the file, login.php , we can use the dirname() function with level 2 and the __FILE__ constant as parameters. Then we can get the exact file path of the working directory. Thus, we can change the levels according to our choice to move upward and downward in the file path. In this way, we can find the path of the root directory of the project in PHP.

php echo dirname(__FILE__,2); ?> 

Use $_SERVER[‘DOCUMENT_ROOT’] to Find the Document Root Directory of a File in PHP

We can use the $_SERVER[] array with the DOCUMENT_ROOT indices to find the document root directory of the currently executing script. It will return the complete path of the document root directory. It is defined in the configuration file in the server. For the file structure above, we can print the $_SERVER[‘DOCUMENT_ROOT’] with the echo function to find the document root directory of the file login.php .

As shown in the output below, we found out the path html is the document root directory of the login.php file. We can see the file path of the root directory as well.

php echo $_SERVER['DOCUMENT_ROOT']; ?> 

Источник

Читайте также:  Javascript дополнить строку символами
Оцените статью