вложенный php включает в себя путь к серверу - PullRequest
0 голосов
/ 29 июля 2011

У меня тут какая-то беспорядок файловой системы на работе, и попытки ее кодировать сводят меня с ума. Надеюсь, кто-то здесь может помочь. Сначала немного фона.

У нас есть несколько доменов на двух разных серверах (один - Windows, другой - Linux). Цель состоит в том, чтобы создать форму, которая может быть включена в любой из доменов. У нас уже есть это, имея две копии формы, по одной на каждом из серверов, и используя абсолютные пути к серверу для включения файла form.php (включая «/etc/www/formhostingdomain/form.php»; и включив «D» : \ www \ formhostingdomain2 \ form.php ", например). Как я уже сказал, эта часть работает.

Теперь я сталкиваюсь с проблемами в том, что файл form.php должен динамически включать еще несколько файлов из той же папки, в которой он находится. Я пробовал относительные ссылки, а также абсолютные пути к серверу для этого, но Я не могу заставить его работать. Один абсолютный сервер include внутри form.php (например, include 'D: \ www \ formhostingdomain2 \ formextras.php';) работает, но если я попробую что-то вроде

$server_path = "D:\\www\\formhostingdomain2\\";
include $server_path."formextras.php";

тогда я не могу заставить его правильно включить. Мне нужно иметь возможность перенести путь к серверу в одну переменную, потому что в файле слишком много включений, чтобы его можно было поддерживать в противном случае. Я пытался играть с одинарными и двойными кавычками, с одинарными, двойными и даже четырехкратными обратными слешами, а также с косыми чертами, но все безрезультатно. Я также прочитал документацию в http://php.net/manual/en/language.types.string.php, но это не пролило свет на ситуацию для меня. Я уверен, что есть что-то тонкое, что мне не хватает.

1 Ответ

1 голос
/ 29 июля 2011

Это должно решить вашу проблему:

include dirname(__FILE__)."/formextras.php";

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

Стоит отметить, что по умолчанию include / require всегда относится к странице, выполняемой в данный момент . Если к form.php имеется прямой доступ (не включенный на другой странице), то вы можете просто сказать include "formextras.php";, что означает, что formextras.php должно быть в том же каталоге, или include "includes/formextras.php";, то есть formextras.php в подкаталоге включает в себя form.php.

Это благословение и проклятие, если у вас есть index.php, который включает form.php, который затем включает formextras.php, тогда относительное включение в form.php от index.php , а не form.php ... dirname(__FILE__) обходит это.

Обновление PHP 5.3 +

Как вы указали, в PHP 5.3 введена новая магическая константа под названием __DIR__, которая сообщает то же самое, что и dirname(__FILE__) ... если вы можете гарантировать, что 5.3 установлена ​​везде, где это более чистое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...