Я провел дни, исследуя Интернет, и я не могу найти ответ, который я пойму и смогу реализовать.
У меня есть веб-сайт, на котором я хочу использовать файлы 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());