У меня есть папка, которая выглядит как эта сортировка
/optik |- shadow - auth.ini |- htdocs |- index.php
и у меня есть фактический каталог
/ |- skel |- include.php
теперь, я создал символическую тень ссылки из skel, поэтому все, что я ставлю в skel, появится в теневой папке. Я сделал это, потому что у меня есть динамические файлы в skel, которые я время от времени меняю, поэтому я не хотел иметь дубликаты копий содержимого skel в каждой из моих папок пользователей. Поэтому я подумал о том, чтобы сделать ссылку на нее ярлыком.
Но теперь я искал, может ли в моем index.php сделать что-то вроде этого
index.php
<? include "/optik/shadow/include.php"; // content
и в моем include.php
<? include "../auth.ini"; // some stuff with auth.ini
Моя цель состоит в том, что я хочу знать, могу ли я использовать символическую ссылку, как фактический каталог в PHP. Поскольку с точки зрения символических ссылок ему нужно перейти в 1 каталог для доступа к auth.ini, но в фактическом каталоге skel этот файл не существует, и мне нужно будет указать весь путь каталога к моему auth.ini. Но поскольку пользовательские папки будут отличаться, невозможно узнать, какой путь к каталогу указать.
Как я могу заставить что-то подобное работать?
PHP должен уважать символические ссылки и следовать им, как если бы они были стандартными каталогами.
Тем не менее, вы все еще работаете с исходным каталогом, в котором находится index.php
. Это означает, что include "../auth.ini";
вызов будет искать /optik
(каталог выше htdocs
), а не каталог выше, в котором находится включенный файл.
Вы можете использовать комбинацию realpath () и dirname () для вычисления фактических канонических путей файлов, к которым вы хотите получить.
Учитывая ваш пример, чтобы включить optik/auth.ini
из вашего optik/shadow/include.php
который сам включен в index.php
, вы можете использовать следующие
// optik/htdocs/index.php // First, add the `optik` directory to the include path set_include_path(implode(PATH_SEPARATOR, array( realpath(dirname(dirname(__FILE__))), get_include_path() )); include 'shadow/include.php'; // optik/shadow/include.php include 'auth.ini';
Поскольку index.php
является родительским файлом, установка пути включения туда каскадирует в любые другие включенные файлы.
Теперь, в отношении символических ссылок, то, что вы предлагаете, должно работать нормально. То, что вы должны иметь в виду (и это массивный PITA), состоит в том, что __FILE__
и __FILE__
будут разрешать символические ссылки. PHP не предлагает абсолютно никакого способа определить неразрешенный путь к символически связанному файлу или каталогу.
Чтобы проиллюстрировать, даже если вы включили свой файл include.php
через shadow
символическую ссылку, использование __FILE__
в этом файле всегда будет возвращать /skel/include.php