Php file paths windows

Как добавить путь до PHP в переменную окружения PATH в Windows

Что такое и для чего нужна PATH

Вполне возможно, что вам не приходилось ранее сталкиваться с PATH и выражениями «переменная окружения», поэтому я кратко поясню, что это такое.

Переменная PATH содержит список папок, в которых Windows ищет исполнимые файлы.

В графическом интерфейсе, когда для запуска программ используются ярлыки, значение PATH не очень большое. Но если вы запускаете программу в командной строке, то PATH может пригодиться. Опять же, если вы указываете полный путь до файла, например, C:\Users\Alex\Documents\php.exe, то PATH не используется. Но если, например, вы запускаете программу только по имени файла или просто по имени (без файлового расширения), то запустится ли программа, будет зависеть от содержимого переменной PATH.

К примеру, я в командной строке пытаюсь запустить файл (без указания полного пути)

В этом случае операционная система посмотрит все записи PATH (там может быть указано несколько каталогов). Затем в каждом из этих каталогов Windows попытается найти файл php.exe. Если файл найден, то он будет запущен. Если файл не найден, то будет выведено соответствующее сообщение.

По сути, что-то дописывать в переменную PATH нужно только тем, кто много работает с командной строкой. К примеру, вы программист и размещаете свои программы в папке C:\MyApps и при этом вы часто запускаете свои утилиты командной строки. В этом случае вы можете добавить C:\MyApps в PATH и после этого для запуска программ из этой папки вам уже не нужно будет каждый раз вводить полное имя (например, C:\MyApps\parser.exe), а достаточно будет в командной строке ввести только имя файла:

Нужно ли в Windows добавлять PHP в переменную окружения

При установке и настройке PHP в Windows необязательно добавлять в PATH путь до PHP, но это рекомендуется делать.

Во-первых, вы сможете запускать PHP используя сокращённую запись:

Во-вторых, ряд расширений (которые включаются в файле php.ini) работают некорректно, если вы не прописали в PATH путь до PHP; в том числе, это касается такого довольно популярного расширения как cURL. По идее — это какой-то баг этих расширений или PHP, но нам самим придётся исправлять ситуацию, поскольку эта проблема существует уже много лет.

Как добавить PHP в системные переменные среды

Нажмите кнопку Windows (это которая раньше была кнопкой «Пуск»), начните набирать «Изменение системных переменных среды»

и откройте соответствующее окно настроек.

Там нажмите «Переменные среды», откроется:

В окне «Системные переменные» найдите и кликните на Path, потом нажмите «Изменить»:

Далее «Создать» и впишите туда «C:\Server\bin\PHP\»:

Поднимите запись в самый Вверх:

Закройте все окна с сохранением сделанных изменений.

Читайте также:  Драйвер для windows под mac

realpath

(PHP 4, PHP 5, PHP 7, PHP 8)

realpath — Возвращает канонизированный абсолютный путь к файлу

Описание

realpath() раскрывает все символические ссылки, переходы типа /./ , /../ и лишние символы / в пути path , возвращая канонизированный абсолютный путь к файлу.

Список параметров

Несмотря на то, что путь должен быть указан, переданное значение может быть пустой строкой. В этих случаях значение интерпретируется как текущая рабочая директория.

Возвращаемые значения

В случае успеха возвращает канонизированный абсолютный путь. Результирующий путь не содержит символических ссылок и компонентов наподобие /./ или ‘ /../ . Разделители \ и / в конце пути также удаляются.

realpath() возвращает false при неудаче, например, если файл не существует.

Запускаемый скрипт должен иметь права запуска на всех директориях в проверяемой иерархии, иначе realpath() вернёт false .

Для регистронезависимых файловых систем, realpath() может нормализовать или не нормализовать регистр символов.

Функция realpath() не будет работать с файлом внутри архива Phar, так как путь может быть не реальным, а виртуальным.

В Windows переходы и символические ссылки на каталоги расширяются только на один уровень.

Замечание: Так как тип integer в PHP является целым числом со знаком и многие платформы используют 32-х битные целые числа, то некоторые функции файловых систем могут возвращать неожиданные результаты для файлов размером больше 2 Гб.

Примеры

Пример #1 Пример использования функции realpath()

( ‘/var/www/’ );
echo realpath ( ‘./../../etc/passwd’ ) . PHP_EOL ;

echo realpath ( ‘/tmp/’ ) . PHP_EOL ;
?>

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

Пример #2 realpath() на Windows

На Windows realpath() изменит пути стиля Unix на стиль Windows.

echo realpath ( ‘/windows/system32’ ), PHP_EOL ;

echo realpath ( ‘C:\Program Files\\’ ), PHP_EOL ;
?>

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

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

  • basename() — Возвращает последний компонент имени из указанного пути
  • dirname() — Возвращает имя родительского каталога из указанного пути
  • pathinfo() — Возвращает информацию о пути к файлу

User Contributed Notes 15 notes

Because realpath() does not work on files that do not
exist, I wrote a function that does.
It replaces (consecutive) occurences of / and \\ with
whatever is in DIRECTORY_SEPARATOR, and processes /. and /.. fine.
Paths returned by get_absolute_path() contain no
(back)slash at position 0 (beginning of the string) or
position -1 (ending)
function get_absolute_path ( $path ) <
$path = str_replace (array( ‘/’ , ‘\\’ ), DIRECTORY_SEPARATOR , $path );
$parts = array_filter ( explode ( DIRECTORY_SEPARATOR , $path ), ‘strlen’ );
$absolutes = array();
foreach ( $parts as $part ) <
if ( ‘.’ == $part ) continue;
if ( ‘..’ == $part ) <
array_pop ( $absolutes );
> else <
$absolutes [] = $part ;
>
>
return implode ( DIRECTORY_SEPARATOR , $absolutes );
>
?>

A test:
( get_absolute_path ( ‘this/is/../a/./test/.///is’ ));
?>
Returns: string(14) «this/a/test/is»

As you can so, it also produces Yoda-speak. 🙂

namespace MockingMagician \ Organic \ Helper ;

class Path
<
/**
* There is a method that deal with Sven Arduwie proposal https://www.php.net/manual/en/function.realpath.php#84012
* And runeimp at gmail dot com proposal https://www.php.net/manual/en/function.realpath.php#112367
* @param string $path
* @return string
*/
public static function getAbsolute ( string $path ): string
<
// Cleaning path regarding OS
$path = mb_ereg_replace ( ‘\\\\|/’ , DIRECTORY_SEPARATOR , $path , ‘msr’ );
// Check if path start with a separator (UNIX)
$startWithSeparator = $path [ 0 ] === DIRECTORY_SEPARATOR ;
// Check if start with drive letter
preg_match ( ‘/^[a-z]:/’ , $path , $matches );
$startWithLetterDir = isset( $matches [ 0 ]) ? $matches [ 0 ] : false ;
// Get and filter empty sub paths
$subPaths = array_filter ( explode ( DIRECTORY_SEPARATOR , $path ), ‘mb_strlen’ );

Читайте также:  После обновления windows долго загружается ноутбук

$absolutes = [];
foreach ( $subPaths as $subPath ) <
if ( ‘.’ === $subPath ) <
continue;
>
// if $startWithSeparator is false
// and $startWithLetterDir
// and (absolutes is empty or all previous values are ..)
// save absolute cause that’s a relative and we can’t deal with that and just forget that we want go up
if ( ‘..’ === $subPath
&& ! $startWithSeparator
&& ! $startWithLetterDir
&& empty( array_filter ( $absolutes , function ( $value ) < return !( '..' === $value ); >))
) <
$absolutes [] = $subPath ;
continue;
>
if ( ‘..’ === $subPath ) <
array_pop ( $absolutes );
continue;
>
$absolutes [] = $subPath ;
>

return
(( $startWithSeparator ? DIRECTORY_SEPARATOR : $startWithLetterDir ) ?
$startWithLetterDir . DIRECTORY_SEPARATOR : »
). implode ( DIRECTORY_SEPARATOR , $absolutes );
>

/**
* Examples
*
* echo Path::getAbsolute(‘/one/two/../two/./three/../../two’); => /one/two
* echo Path::getAbsolute(‘../one/two/../two/./three/../../two’); => ../one/two
* echo Path::getAbsolute(‘../.././../one/two/../two/./three/../../two’); => ../../../one/two
* echo Path::getAbsolute(‘../././../one/two/../two/./three/../../two’); => ../../one/two
* echo Path::getAbsolute(‘/../one/two/../two/./three/../../two’); => /one/two
* echo Path::getAbsolute(‘/../../one/two/../two/./three/../../two’); => /one/two
* echo Path::getAbsolute(‘c:\.\..\one\two\..\two\.\three\..\..\two’); => c:/one/two
*
*/
>

realpath() is just a system/library call to actual realpath() function supported by OS. It does not work on a path as a string, but also resolves symlinks. The resulting path might significantly differs from the input even when absolute path is given. No function in this notes resolves that.

The suggestion on the realpath man page is to look for an existing parent directory. Here is an example:
function resolvePath ( $path ) <
if( DIRECTORY_SEPARATOR !== ‘/’ ) <
$path = str_replace ( DIRECTORY_SEPARATOR , ‘/’ , $path );
>
$search = explode ( ‘/’ , $path );
$search = array_filter ( $search , function( $part ) <
return $part !== ‘.’ ;
>);
$append = array();
$match = false ;
while( count ( $search ) > 0 ) <
$match = realpath ( implode ( ‘/’ , $search ));
if( $match !== false ) <
break;
>
array_unshift ( $append , array_pop ( $search ));
>;
if( $match === false ) <
$match = getcwd ();
>
if( count ( $append ) > 0 ) <
$match .= DIRECTORY_SEPARATOR . implode ( DIRECTORY_SEPARATOR , $append );
>
return $match ;
>
?>

The result will retrieve absolute path for non-existing relative path. Even if a path does not exists, there should be existing directory somewhere, for which the realpath could be obtained. If this is not within the relative path (i.e. even current working directory does not exists), getcwd() will retrieve absolute path, so some absolute path is returned (although in that case the PHP process could have huge problems).

Needed a method to normalize a virtual path that could handle .. references that go beyond the initial folder reference. So I created the following.
function normalizePath ( $path )
<
$parts = array(); // Array to build a new path from the good parts
$path = str_replace ( ‘\\’ , ‘/’ , $path ); // Replace backslashes with forwardslashes
$path = preg_replace ( ‘/\/+/’ , ‘/’ , $path ); // Combine multiple slashes into a single slash
$segments = explode ( ‘/’ , $path ); // Collect path segments
$test = » ; // Initialize testing variable
foreach( $segments as $segment )
<
if( $segment != ‘.’ )
<
$test = array_pop ( $parts );
if( is_null ( $test ))
$parts [] = $segment ;
else if( $segment == ‘..’ )
<
if( $test == ‘..’ )
$parts [] = $test ;

if( $test == ‘..’ || $test == » )
$parts [] = $segment ;
>
else
<
$parts [] = $test ;
$parts [] = $segment ;
>
>
>
return implode ( ‘/’ , $parts );
>
?>

Will convert /path/to/test/.././..//..///..///../one/two/../three/filename
to ../../one/three/filename

php php.ini — файл конфигурации PHP
установка всех параметров настройки

Файл конфигурации PHP 7 — php.ini, управляет многими аспектами поведения PHP. Он содержит директивы и параметры, управляющие работой интерпретатора PHP. При загрузке, интерпретатор PHP, ищет его рабочем каталоге, затем, в каталоге определенном в переменной окружения — PHPRC и наконец, в пути, который был определен во время инсталляции (в таком порядке). Для Windows — это определенный во время инсталляции каталог — C:\PHP7. Путь, в котором будет производиться поиск файла php.ini, может быть отменен, используя параметр -c, в режиме командной строки.
Синтаксис файла чрезвычайно прост. Пустые строки и пробелы, перед директивой игнорируются. Строки, которые начинаются с символа — » ; «, считают комментариями, и игнорируется. Комментарии могут быть включены в строку после директивы конфигурации.
foo = ; sets foo to an empty string
foo = none ; sets foo to an empty string
foo = «none» ; sets foo to the string ‘none’
Для определения директив, используется следующий синтаксис:
директива = значение
Имена директив, зависимы от регистра — foo=bar, отличается от FOO=bar.
Значение может быть строкой, числом, константой PHP (например. E_ALL или M_PI), одной из констант INI (On, Off, True, False, Yes, No и None) ) или выражением (например. E_ALL &

Читайте также:  Вечная активация для windows 10

E_NOTICE), или строкой заключенной в кавычки («foo»).
Выражения в файле INI ограничены логическими операторами и круглыми скобками:
| bitwise OR
& bitwise AND

pathinfo — Возвращает информацию о пути к файлу

(PHP 4 >= 4.0.3, PHP 5, PHP 7)

pathinfo — Возвращает информацию о пути к файлу

Описание

pathinfo() возвращает информацию о path в виде ассоциативного массива или строки в зависимости от options .

Список параметров

Если указан, то задает для возврата отдельный элемент: один из следующих PATHINFO_DIRNAME , PATHINFO_BASENAME , PATHINFO_EXTENSION и PATHINFO_FILENAME .

Если options не указан, то возвращаются все доступные элементы.

Возвращаемые значения

Если параметр options не передан, то возвращаемый ассоциативный массив ( array ) будет содержать следующие элементы: dirname, basename, extension (если есть) и filename.

Если path содержит больше одного расширения, то PATHINFO_EXTENSION возвращает только последнее и PATHINFO_FILENAME отрезает только последнее расширение. (смотрите пример ниже).

Если path не содержит расширения, то не будет возвращен элемент extension (см. ниже второй пример).

Если указан параметр options , будет возвращена строка ( string ), содержащая указанный элемент.

Список изменений

Версия Описание
5.2.0 Добавлена константа PATHINFO_FILENAME .

Примеры

Пример #1 Пример использования функции pathinfo()

echo $path_parts [ ‘dirname’ ], «\n» ;
echo $path_parts [ ‘basename’ ], «\n» ;
echo $path_parts [ ‘extension’ ], «\n» ;
echo $path_parts [ ‘filename’ ], «\n» ; // начиная с PHP 5.2.0
?>

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

Пример #2 Пример с pathinfo() , показывающий разницу между null и отсутствием расширения.

= pathinfo ( ‘/path/emptyextension.’ );
var_dump ( $path_parts [ ‘extension’ ]);

$path_parts = pathinfo ( ‘/path/noextension’ );
var_dump ( $path_parts [ ‘extension’ ]);
?>

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

Примечания

Подробнее о получении информации о текущем пути, обратитесь к секции » Предопределенные зарезервированные переменные».

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

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

  • dirname() — Возвращает имя родительского каталога из указанного пути
  • basename() — Возвращает последний компонент имени из указанного пути
  • parse_url() — Разбирает URL и возвращает его компоненты
  • realpath() — Возвращает канонизированный абсолютный путь к файлу
Оцените статью