А. Что это делает?
require ("./file.php");
Б. по сравнению с этим?
require ("file.php");
(Его не вверх-один-каталог .., который будет)
require ("../file.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.
Он явно называет текущий каталог.