Что делает точка-косая черта для PHP, включая вызовы?

А. Что это делает?

require ("./file.php"); 

Б. по сравнению с этим?

 require ("file.php"); 

(Его не вверх-один-каталог .., который будет)

 require ("../file.php"); 

Solutions Collecting From Web of "Что делает точка-косая черта для PHP, включая вызовы?"

./текущий каталог. Это во многом то же самое, что и file.php , но во многих случаях (включая этот) он не проверяет какие-либо стандартные места PHP может искать файл, вместо этого проверяя только текущий каталог.

Из документации PHP (обратите внимание на последнее предложение):

Файлы для включения сначала просматриваются в каждой записи include_path относительно текущего рабочего каталога, а затем в каталоге текущего скрипта. Например, если ваш include_path является библиотекой, текущим рабочим каталогом является / www /, вы включили include / a.php, и в этом файле есть «b.php», b.php сначала просматривается в / www / libraries /, а затем в / WWW / включить /. Если имя файла начинается с ./ или ../, оно отображается только в текущем рабочем каталоге.

Первая версия заставляет внутренний механизм включать файлы относительно … непосредственно исполняемого файла. Так, например, у вас есть

index.php

 // directly executed script (php -f index.php or from a browser) include 'second.php'; 

second.php

 // This is included relatively to index.php // Actually, it is first searched relatively to include_path, then relatively // to index.php include './third.php'; 

third.php

 // This is included relatively to second.php ONLY. It does not search // include_path return "foo"; 

Короткий ответ

Вы правы, это не один каталог. A. ссылается на каталог, в котором вы находитесь, и .. ссылается на родительский каталог.

Значение ./file.php и file.php функционально эквивалентны в PHP. Вот релевантная страница документации: http://us.php.net/manual/en/wrappers.file.php

Более длинный ответ

Однако только потому, что они работают одинаково в этом контексте, это не значит, что они всегда одинаковы.

Когда вы работаете в среде оболочки * nix и вводите имя исполняемого файла, оболочка будет выглядеть в каталогах PATH, но она не будет отображаться в CWD или в каталоге, в котором вы сейчас находитесь.

Итак, если вы находитесь в каталоге, в котором есть файл с именем: myprogram.php (это будет файл CLI для PHP), и вы просто наберете:

myprogram.php

не имеет значения, является ли ваша программа исполняемой или нет. Оболочка будет выглядеть в / bin /, / usr / bin / etc для вашего файла, но она не будет выглядеть ./ или каталог, в котором вы находитесь.

Чтобы выполнить эту программу без добавления вашего каталога в PATH, вам нужно ввести

./myprogram

Так что, действительно, ./ более явственно. Это означает, что «файл, который вы ищете, должен быть здесь» и нет ./ означает «файл должен быть где-то в программе, ищущей файлы».

Просто вы говорите, что php включает файл только в текущий каталог или не работает, если файл отсутствует.

Если вы используете формат «indexcommon3.php», а файл отсутствует, php будет искать его в системной переменной include_path.

Для справки вы можете использовать http://www.php.net/manual/en/function.include.php

Точечная косая черта заставляет файл искать только в текущем каталоге, а не дополнительно искать пути, указанные в параметре include_path.

Он явно называет текущий каталог.