2009-09-08 1 views
1

Когда я использую php include для включения страницы на моем веб-сайте, все пути в файле, в который я включаю, перепутаны. Включенная страница действует так, как будто она находится в той же папке, что и страница im, включая.php include, все пути перепутаны

Есть ли способ избежать/исправить эту проблему?

+3

Итак, вы ожидаете, что включенные файлы не будут включены? –

ответ

1

Что ваш путь включают установлен? Если included.php не является тем же каталогом, что и page.html, вы можете добавить существующий путь include.

<?php 
$path = '/path/to/includes'; 
set_include_path(get_include_path() . PATH_SEPARATOR . $path); 
?> 

Попробуйте the PHP manual

1

Вам может понадобиться установить включить путь правильно, например, с помощью:

set_include_path(get_include_path() . PATH_SEPARATOR . 'YourPath'); 

Тогда вам просто необходимо включить, как если бы это было одно и то же каталог:

include 'FileName.php'; 
0

Нет, это поведение по умолчанию функции включения php: оно в основном копирует содержимое включенного файла в файл include. Таким образом, инструкции во включенном файле ведут себя так, как если бы они находились во включенном файле (потому что они в некотором роде).

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

2

Один из способов я пытаюсь обойти эту проблему, является всегда в том числе от того, где базируется файл, в том числе другой файл:

$here = dirname(__FILE__); 
include($here."/../include.php"); 
// will include a file *allways* one level up from where *this* file is located 
// and not the file that started the execution of the script. 

я иногда файлы которые доступны из нескольких разных мест, и поэтому путь к файлам может немного затрудниться. Поэтому я обычно пытаюсь включить файл конфигурации в известную точку, а затем определить пути к общим точкам включения.

// from a common config file 
define("PATH_TO_CLASS", dirname(__FILE__)."/../class"); 
define("PATH_TO_MEDIA", dirname(__FILE__)."/../assets/media"); 

Затем вы можете использовать в файле вы включены в конфигурационный файл как:

include dirname(__FILE__)."/../config.php"; 
include PATH_TO_CLASS."/snassy.class.php"; 
+0

Красивый трюк. Решила мою головную боль. –

0

Другой ответ для вас. Если по какой-то причине вещи неизменяемы I've used chdir() к некоторому успеху.

Например, у меня были мобильные пользователи и использовали другую директорию, чем основной сайт, но хотели использовать все функции и классы основного сайта, поэтому я должен был бы chdir(/to/the/main/site/folder); прямо перед вызовом общего кода, который требовался разные включают пути. Я бы использовал экономно, хотя ... поскольку все может запутаться.

 Смежные вопросы

  • Нет связанных вопросов^_^