dirname (__ FILE__) на локальном хосте - PullRequest
4 голосов
/ 18 февраля 2012

Я использую WAMP и у меня есть сайт для разработки в каталоге www.Я хочу использовать dirname(__FILE__) для определения пути к корню сервера.

В настоящее время я использую файл конфигурации, который содержит:

define('PATH', dirname(__FILE__));

Я включаю файл конфигурации в мой header.php файл, например:

<?php require_once("config.php") ?>

Затем на своих подстраницах я использую константу PATH, чтобы определить путь, включая header.php.

<?php require_once("../inc/header.php"); ?> 

Однако мои ссылки выглядят так:

<link rel="stylesheet" href="C:\wamp\www/css/style.css" />

Что мне нужно сделать, чтобы это исправить?И поскольку я включаю свою константу в файл header.php, у меня нет доступа к константе в исходном require_once("../inc/header.php");. Какой другой метод я могу использовать, чтобы найти корень для header.php?

Ответы [ 3 ]

8 голосов
/ 18 февраля 2012

Похоже, вам просто нужно иметь

define('PATH', $_SERVER['SERVER_NAME']);

Если вы хотите быть сверхтехническим, вы можете сделать что-то подобное вместо этого.

define('PATH', str_replace($_SERVER['DOCUMENT_ROOT'], $_SERVER['SERVER_NAME'] . '/', dirname(__FILE__)));

На заметку, и, что более важно, , они вам на самом деле не нужны.Это будет работать.

<link rel="stylesheet" href="/css/style.css" />

Когда href начинается с разделителя каталогов, он считается относительно корня документа, а не текущего рабочего каталога.

1 голос
/ 18 февраля 2012

__FILE__ - это путь к файловой системе, а не путь URL. Я думаю, вы можете запутаться в том, что вам нужно. Чтобы включить php-файлы или переместить их, вы захотите использовать путь к файловой системе. Для создания URL-адресов к ресурсам вы хотите использовать URL-адрес.

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

define('ROOT_PATH', dirname(__FILE__));
define('INC_PATH', ROOT_PATH . DIRECTORY_SEPARATOR . 'includes');

Что касается заданий (css, images, js), я хотел бы хранить их в одном месте на DOCUMENT_ROOT, поэтому путь всегда равен /css/path/to/file.css независимо от того, где вы находитесь в файловой структуре. Это может быть проблемой, если вы разрабатываете в подпапках на локальном компьютере или на тестовом сервере, но этого легко избежать, используя виртуальные хосты, так что каждый сайт имеет свою собственную файловую структуру, полностью отделенную от других.

0 голосов
/ 14 ноября 2012
$server = str_replace('\\','/',$_SERVER['SERVER_NAME']);
$server = (substr($server,-1)=='/'?substr($server,0,strlen($server)-1):$server);
!defined('PATH')?define('PATH', 'http://'.str_replace($_SERVER['DOCUMENT_ROOT'],$server , str_replace('\\','/',dirname(__FILE__)))):'';
...