XAMPP Локальная установка Проблемы с Путь к файлу - PullRequest
0 голосов
/ 12 февраля 2012

Мне нравится работать на веб-сайтах перед загрузкой на мой хост. Я использую серверы PHP / MYSQL при установке XAMPP.

У меня есть несколько каталогов в каталоге XAMPP htdocs (по одному для каждого проекта). Каждый проект обычно имеет как минимум:

  1. header.php
  2. index.php
  3. footer.php
  4. стили / stylesheet.css

До недавнего времени это работало нормально.

Сейчас я работаю над более обширной структурой файлов / каталогов. Теперь, когда /about/index.php вызывает header.php, путь к каталогу таблицы стилей не указывает в правильном направлении. Пути к изображениям больше не указывают в нужном месте, поскольку все они являются относительными путями.

Я пытался сначала указывать все на домашний каталог, используя "/" в начале каждого пути, но в XAMPP домашний каталог теперь ссылается на localhost, а не на каталог для конкретного проекта.

Какое решение? Есть ли лучший способ работать над проектами локально, чтобы я мог просто загрузить их на свой веб-хостинг, используя все относительные пути и не меняя их для live и dev версий сайта?

Ответы [ 5 ]

2 голосов
/ 19 января 2015

Самое простое решение, на которое ответил @ Владимир Димитров в эта тема выглядит следующим образом (я просто скопирую его здесь):

Самый простой способ - этосоздайте отдельный виртуальный хост для каждой папки сайта в / htdocs. Таким образом, вы получите доступ к http: // mysite.local вместо http: // localhost / mysite

. Необходимо сделать две вещи: 1. отредактировать C:\ xampp \ apache \ conf \ extra \ httpd-vhosts.conf (по умолчанию), добавив что-то вроде:

<VirtualHost *:80>
ServerName      mysite.local
DocumentRoot    C:/XAMPP/htdocs/mysite
</VirtualHost>

редактирование c: \ windows \ system32 \ drivers \ etc \ hosts, добавление

127.0.0.1 mysite.local

, перезапустите xampp и попробуйте http://mysite.local

0 голосов
/ 14 февраля 2012

Я решаю эту проблему, определяя некоторые константы:

#   index.php
#    handles pretty much everything for the site
define( 'DS', DIRECTORY_SEPARATOR );
define( 'ROOT', dirname(__file__) );
define( 'HOST', 'http://' . $_SERVER['HTTP_HOST'] . dirname( $_SERVER['PHP_SELF'] ) );

Затем для включений я делаю что-то вроде этого:

include ROOT . DS . 'directory' . DS . 'file_i_want.php';

Для CSS и прочего, может быть проще установить базовый URL в разметке .

0 голосов
/ 12 февраля 2012

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

0 голосов
/ 12 февраля 2012

Вы можете попробовать это:

  • создать общий файл конфигурации
  • определить константу BASE_URL для вашего домашнего каталога (например, http://localhost/my_project/)
  • в ваших шаблонах используйте все ваши ссылки и ссылки с BASE_URL

При развертывании вам потребуется изменить только один файл.

Вы также можете установить константу BASE_PATH для своего каталога (например, c: / xampp / htdocs / my_project). Это может быть полезно при попытке включить сценарии из различных подкаталогов, не «угадывая» локальный путь. (например, включить BASE_PATH. 'templates / my_template.php')

0 голосов
/ 12 февраля 2012

Попробуйте включить их, используя `DOCUMENT_ROOT для ваших файлов PHP, то есть:

include($_SERVER['DOCUMENT_ROOT']."folder/header.php");

Это предполагает, что при просмотре в браузере header.php может быть найден, набрав http://127.0.0.1/folder/header.php

Для других файлов, таких как CSS, Javascript, вы можете определить местоположение следующим образом:

define("SCRIPTS_URL", "http://127.0.0.1/_scripts/");

Включите вышеупомянутое в ваш файл header.php и убедитесь, что вы включили header.php перед вызовом фактического HTMLзаголовок, например:

<?php
include($_SERVER['DOCUMENT_ROOT']."folder/header.php");
?>
<html>
    <link rel="stylesheet" type="text/css" href="<?php echo SCRIPTS_URL; ?>stylesheet.css">
    ... etc etc ...

Вы можете дополнительно объединить define и создать части каталога, например:

$project = "project_x";
include($_SERVER['DOCUMENT_ROOT'].$project."/header.php");
define("SCRIPTS_URL", "http://127.0.0.1/".$project."/_scripts/");

Если вы делаете это, как указано выше, то вам нужно толькоизмените переменную проекта, если вы видите ...

Обновление

Ниже будет index.php:

<?php
// Make the header relative to index.php (as we don't know the project) - assume header is located at /_template/header.php and this file is located at /index.php [if, in future you have /content/index.php - then the below would be ../_template/header.php, etc]
if(file_exists("_template/header.php")){
    include_once("_template/header.php");
} else {
    die('Fatal error - no header found');
}

?>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="<?php echo BASE_URL; ?>styles/stylesheet.css">
</head>
<body>
// Content goes here
</body>
</html>
<?php

if(file_exists(ROOTPATH."_template/footer.php")){
    include_once(ROOTPATH."_template/footer.php");
}
?>

И заголовок.php:

<?php
define("PROJECT_NAME", "project_x");
define("ROOTPATH", $_SERVER['DOCUMENT_ROOT'].PROJECT_NAME."/");
define("BASE_URL", "http://".$_SERVER['SERVER_NAME']."/".PROJECT_NAME."/"); // $_SERVER['SERVER_NAME'] automatically puts 'localhost' or the domain name in automatically
?>

Как вы можете видеть - все определено в этом заголовочном файле и когда он включен в index.php - index.php может получить доступ к этим определениям, как и любой другой файл, включенный послеопределение было сделано (обратите внимание, что вы не можете переписать определение и не можетеопределить одно и то же определение дважды.

...