Получить абсолютный путь к текущему скрипту

Я искал высоко и низко и получал множество различных решений и varialbles, содержащих информацию, чтобы получить абсолютный путь. Но они, похоже, работают при некоторых условиях, а не под другими. Есть ли один серебряный пуля, чтобы получить абсолютный путь к текущему исполняемому скрипту в php? Для меня сценарий будет запущен из командной строки, но он должен работать так же хорошо, как и в apache и т. Д.

Уточнение: начальный исполняемый скрипт, а не тот файл, в котором мы сейчас находимся

Solutions Collecting From Web of "Получить абсолютный путь к текущему скрипту"

__FILE__ даст вам абсолютный путь к текущему файлу.

UPD :

Как только вопрос был изменен для получения сценария, который инициировал среду выполнения, единственным (?) Надежным способом сделать это является использование функции debug_backtrace .

 $stack = debug_backtrace(); $firstFrame = $stack[count($stack) - 1]; $initialFile = $firstFrame['file']; 
 echo realpath(dirname(__FILE__)); 

Если вы разместите его во включенном файле, он напечатает путь к этому включению. Чтобы получить путь к родительскому скрипту, замените __FILE__ на $_SERVER['PHP_SELF'] . Но имейте в виду, что PHP_SELF – это риск для безопасности!

Примеры для: https://example.com/subFolder/yourfile.php?var=blabla#12345

типичные коды PHP:

 //parse_url $x = parse_url($url); $x['scheme'] 🡺 https $x['host'] 🡺 example.com (or with WWW) $x['path'] 🡺 /subFolder/yourfile.php $x['query'] 🡺 var=blabla $x['fragment'] 🡺 12345 // hashtag outputed only in case, when hashtag-containing string was manually passed to function, otherwise PHP is unable to recognise hashtags in $_SERVER //pathinfo (If you will ever use this function, I only recommend to pass `parse_url`s output as argument) $x = pathinfo($url); $Y = pathinfo(parse_url($url)['path']); $x['dirname'] 🡺 https://example.com/subFolder $Y['dirname'] 🡺 /subFolder $x['basename'] 🡺 yourfile.php?var=blabla#12345 $Y['basename'] 🡺 yourfile.php $x['extension'] 🡺 php?var=blabla#12345 $Y['extension'] 🡺 php $x['filename'] 🡺 yourfile $Y['filename'] 🡺 yourfile //=================================================== // //========== self-defined SERVER variables ========== // //=================================================== // $_SERVER["DOCUMENT_ROOT"] 🡺 /home/user/public_html $_SERVER["SERVER_ADDR"] 🡺 143.34.112.23 $_SERVER["SERVER_PORT"] 🡺 80(or 443 etc..) $_SERVER["REQUEST_SCHEME"] 🡺 https //similar: $_SERVER["SERVER_PROTOCOL"] $_SERVER['HTTP_HOST'] 🡺 example.com (or with WWW) //similar: $_SERVER["ERVER_NAME"] $_SERVER["REQUEST_URI"] 🡺 /subFolder/yourfile.php?var=blabla $_SERVER["QUERY_STRING"] 🡺 var=blabla __FILE__ 🡺 /home/user/public_html/subFolder/yourfile.php __DIR__ 🡺 /home/user/public_html/subFolder //same: dirname(__FILE__) $_SERVER["REQUEST_URI"] 🡺 /subFolder/yourfile.php?var=blabla parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH)🡺 /subFolder/yourfile.php $_SERVER["PHP_SELF"] 🡺 /subFolder/yourfile.php // ==================================================================// //if "YOURFILE.php" is included in "PARENTFILE.php" , and you visit "PARENTFILE.PHP?abc": $_SERVER["SCRIPT_FILENAME"]🡺 /home/user/public_html/parentfile.php $_SERVER["PHP_SELF"] 🡺 /parentfile.php $_SERVER["REQUEST_URI"] 🡺 /parentfile.php?abc __FILE__ 🡺 /home/user/public_html/subFolder/yourfile.php // =================================================== // // ================= handy variables ================= // // =================================================== // //If site uses HTTPS: $HTTP_or_HTTPS = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS']!=='off') || $_SERVER['SERVER_PORT']==443) ? 'https://':'http://' ); //in some cases, you need to add this condition too: if ('https'==$_SERVER['HTTP_X_FORWARDED_PROTO']) ... //To trim values to filename, ie basename($url) 🡺 yourfile.php //excellent solution to find origin $debug_files = debug_backtrace(); $initial_called_file = count($debug_files) ? $debug_files[count($debug_files) - 1]['file'] : __FILE__; 

Обратите внимание !:

  • hastag (# …) детали url не могут быть обнаружены с PHP (на стороне сервера). Для этого используйте Javascript.
  • DIRECTORY_SEPARATOR возвращает \ для хостов Windows-типа вместо / .


Для WordPress

 //(let's say, if wordpress is installed in subdirectory: http://example.com/wpdir/) home_url() 🡺 http://example.com/wpdir/ //if is_ssl() is true, then it will be "https" get_stylesheet_directory_uri() 🡺 http://example.com/wpdir/wp-content/themes/THEME_NAME [same: get_bloginfo('template_url') ] get_stylesheet_directory() 🡺 /home/user/public_html/wpdir/wp-content/themes/THEME_NAME plugin_dir_url(__FILE__) 🡺 http://example.com/wpdir/wp-content/themes/PLUGIN_NAME plugin_dir_path(__FILE__) 🡺 /home/user/public_html/wpdir/wp-content/plugins/PLUGIN_NAME/ 
 __DIR__ 

Каталог файла. Если используется внутри include, возвращается каталог включенного файла. Это эквивалентно dirname(__FILE__) . Это имя каталога не имеет завершающей косой черты, если это не корневая директория.

getcwd() – правильный ответ – http://php.net/manual/en/function.getcwd.php

__FILE__ вернет путь с именем файла, например, на XAMPP C:\xampp\htdocs\index.php

Вы хотите получить текущий рабочий каталог, поэтому используйте getcwd() для получения C:\xampp\htdocs\

 dirname(__FILE__) 

даст абсолютный маршрут текущего файла, из которого вы требуете маршрут, маршрут вашего каталога сервера.

Примеры файлов:

www / http / html / index.php; если вы поместите этот код внутри вашего index.php, он вернется:

<?php echo dirname(__FILE__); // this will return: www/http/html/

www / http / html / class / myclass.php; если вы разместите этот код внутри myclass.php, он вернется:

<?php echo dirname(__FILE__); // this will return: www/http/html/class/

Просто используйте ниже:

 echo __DIR__; 

Если вы ищете абсолютный путь относительно корня сервера, я обнаружил, что это работает хорошо:

 $_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['SCRIPT_NAME']) 
 `realpath(dirname(__FILE__))` 

он дает вам текущий скрипт (скрипт, внутри которого вы поместили этот код), без конечной косой черты. это важно, если вы хотите включить другие файлы с результатом

Вот полезная функция PHP, которую я написал для этого точно. По мере выяснения исходного вопроса он возвращает путь, из которого был выполнен исходный скрипт, а не тот файл, в котором мы сейчас находимся.

 /** * Get the file path/dir from which a script/function was initially executed * * @param bool $include_filename include/exclude filename in the return string * @return string */ function get_function_origin_path($include_filename = true) { $bt = debug_backtrace(); array_shift($bt); if ( array_key_exists(0, $bt) && array_key_exists('file', $bt[0]) ) { $file_path = $bt[0]['file']; if ( $include_filename === false ) { $file_path = str_replace(basename($file_path), '', $file_path); } } else { $file_path = null; } return $file_path; } 

В случае использования фреймворка большинство из них не работает, поэтому я нашел решение для этого. Код:

 echo dirname(__FILE__).'\\'.basename(__FILE__); 

Он должен указывать абсолютный путь, включая имя файла.

 realpath($_SERVER['SCRIPT_FILENAME']) 

Для запуска сценария под веб-сервером $_SERVER['SCRIPT_FILENAME'] будет содержать полный путь к первоначально названному сценарию, поэтому, вероятно, ваш index.php. realpath() в этом случае не требуется.

Для сценария, запускаемого с консоли $_SERVER['SCRIPT_FILENAME'] будет $_SERVER['SCRIPT_FILENAME'] относительный путь к вашему первоначально названному сценарию из текущего текущего каталога. Поэтому, если вы не изменили рабочий каталог внутри вашего скрипта, он решит абсолютный путь.

попробуйте это на своем скрипте

 echo getcwd() . "\n";