Я провел дни, исследуя Интернет, и я не могу найти ответ, который я пойму и смогу реализовать.
У меня есть веб-сайт, на котором я хочу использовать файлы include_once
и иметь возможность правильно просматривать веб-сайт как на локальном, так и на фактическом сервере.
Раньше я использовал $_SERVER['DOCUMENT_ROOT']
но он не работает на локальном хосте, поэтому мне сложно обновить и внести изменения на веб-сайт.
Я хочу создать какой-то файл config.php, в котором могу сказать, что корневая папка называется htdocs
или public_html
и «начинает» поиск файлов оттуда.
Или есть ли какой-либо другой способ, которым я могу включить включенные пути для работы?
Я видел ответы, например, с dirname(__FILE__)
, dirname(__FILE__)
и т. Д., Но они никогда не объясняли, как это будет работать, где писать его в коде и т. Д. Мне немного надоело находить часть ответа и затем бегите по кругу, просто попробуйте «заполнить» пробелы. Я не эксперт по PHP, просто пытаюсь сделать мою жизнь немного легче, используя ее.
dirname(__FILE__)
и dirname(__FILE__)
оба одинаковые и __DIR__
поставляется с PHP 5.3
Они используются, чтобы указать, что «путь к файлу, в котором они вызывались».
URL: http: //localhost/test/a.php DIR: --NIX /var/www/test/a.php --ВЫИГРАТЬ D: \ лампа \ WWW \ тест \ a.php // a.php внутри <? PHP echo __DIR__;
Дает вам это на linux: /var/www/test
Итак, если вам нужен параметр конфигурации во всем вашем проекте, просто определите его в своем config.php и используйте его там, где вы хотите, чтобы оба имени файла были включены.
./ config.php index.php header.php footer.php / Lib foo.php / TMP bar.php
./config.php define('ROOT', __DIR__ .'/');
./index.php include_once(ROOT .'header.php'); ... include_once(ROOT .'footer.php');
include_once(ROOT .'header.php'); ... include_once(ROOT .'footer.php');
т.е., используя его в tmp dir
./tmp/bar.php include_once(ROOT .'lib/foo.php');
ОБНОВИТЬ
// config.php <?php define("ROOT", __DIR__ ."/");
Итак, мы используем это для index.php
чтобы включить banner.php
и banner.php
в ./banners/banner.php
;
// index.php and the very first line! <?php include_once("config.php"); ?> // some html stuff // ... <?php include_once(ROOT ."banners/banner.php"); ?> // some more html stuff // ...
Итак, сначала вы должны включить config.php туда, где вам это нужно.
Я думаю, это является основным, насколько это необходимо …
ОБНОВИТЬ
Так что ваша проблема не в PHP, а в системе, но вопрос, во всяком случае … 🙂
Если ваш путь изображения изменяется (поэтому не фиксирован), вы можете сделать это следующим образом;
// config.php define("ROOT", __DIR__ ."/"); define("HTTP", ($_SERVER["SERVER_NAME"] == "localhost") ? "http://localhost/your_work_folder/" : "http://your_site_name.com/" ); // banner.php <img src="<?php print HTTP; ?>images/banner.gif">
Я обычно настраиваю то, что вы упомянули, config.php в каталоге include и имеет в себе следующую строку: define('BASE_PATH', str_replace('/include', '', dirname(__FILE__)));
(«/ include должен быть в любом каталоге вашего файла config.php, если он есть в корневом каталоге, вы можете просто использовать define('BASE_PATH', dirname(__FILE__));
). Когда я хочу включить любые другие После этого я использую include_once(BASE_PATH . '/directory/file.php');
Примечание: эта концепция для меня не является оригинальной.
Существует функция, называемая getcwd()
которая вернет текущую рабочую папку. Если вы назовете это в самом начале своего скрипта, вы можете сохранить его, как правило, в константу с помощью define()
.
define('PROJECT_ROOT', getcwd());
Чтобы получить / отобразить текущий рабочий каталог, php имеет встроенную функцию для этого
echo getcwd() . "\n";
Будет отображаться текущий каталог вашего php-файла, который сейчас выполняется.
Вы также можете изменить путь включения, например,
$dir = dirname(__FILE__); set_include_path($dir . '/../library' . PATH_SEPARATOR . $dir . '/../engine' . PATH_SEPARATOR . get_include_path());