Путь PHP для включения файлов - PullRequest
       8

Путь PHP для включения файлов

0 голосов
/ 25 сентября 2011

У меня есть сайт с index.php.В index.php есть несколько включаемых файлов, таких как

 <?php include_once('scripts/php/index_mainImageJoin.php');?>

. Я создал новую папку в корневом каталоге под названием «extrapages», и у меня будут страницы, содержащие информацию, относящуюся ксайт.Я добавил файлы include_once, как указано выше, и изменил путь, и они отлично работают.

Проблема, которую я нахожу, заключается в том, что пути внутри включаемых файлов не работают.Например: если изображение или другой включаемый файл находится во включаемом файле, он завершается ошибкой при запуске из папки «extrapages».Путь к проблеме.

Есть ли хороший способ справиться с этим?Могу ли я изменить / установить путь к корню сайта (www) для страниц в разделе «extrapages», чтобы одна папка была случайно выбрана?

Я мог бы переместить эти страницы в корень, и они будут работать нормально, но я действительноне хочу, чтобы весь беспорядок в корне сайта.

Любые идеи & thx

Ответы [ 4 ]

1 голос
/ 25 сентября 2011

Ключ к любой проблеме пути называется абсолютный путь

  • при создании гиперссылок для вашего сайта (включая источники изображений), всегданачните с /, за которым следует полный правильный путь.И это никогда не подведет вас.

  • то же самое для вызовов файловой системы: всегда используйте абсолютный путь.Ваш сервер обычно предоставляет вам очень удобную переменную, которая называется $_SERVER['DOCUMENT_ROOT'] и содержит точку, где файловая система встречается с веб-сервером, указывая на ваш корневой веб-каталог.

Таким образом, при вызове из любого места на вашем сайте,

include $_SERVER['DOCUMENT_ROOT'].'/scripts/php/index_mainImageJoin.php';

всегда будет указывать на одно и то же местоположение

0 голосов
/ 25 сентября 2011

Просто добавьте свой путь включения один раз (где-то в начале или в файле конфигурации), используя set_include_path(), см. Руководство . Используйте абсолютный путь (не относительный; можно использовать dirname(__FILE__)), и он должен работать постоянно.

0 голосов
/ 25 сентября 2011

Если вы используете PHP 5.3.0 или новее, вы можете (вместо того, что предложил RageZ) использовать просто __DIR__ (недавно определенная магическая константа).

пример:

include __DIR__ . '/../include.php';

Теперь, это не поможет, если вы хотите избежать ../ и составить карту ваших включений. Однако есть лучший способ сделать это - во всех интерфейсных файлах (которые должны быть ТОЛЬКО доступными для пользователя файлами PHP) вы определяете константу, которая обеспечивает корневой путь вашего сценария (а не текущего файла). 1008 *

Например:

index.php

<?php
define('MYSCRIPT_ROOT', dirname(__FILE__));
// or in php 5.3+ ...
define('MYSCRIPT_ROOT', __DIR__);

// ... do some stuff here

include MYSCRIPT_ROOT . '/includes/myinclude.php';

Теперь предположим, что мы хотим включить файл в наш каталог include.

Давайте сделаем это в includes/myinclude.php и включим файл includes/myotherinclude.php

includes/myinclude.php

<?php
if(!defined('MYSCRIPT_ROOT')) exit; // prevent direct access - ALWAYS a good idea.

// ... do stuff here or something

include MYSCRIPT_ROOT . '/includes/myotherinclude.php';

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

пример:

subdirectory/index.php

index.php

<?php
define('MYSCRIPT_ROOT', dirname(dirname(__FILE__)));
// or in php 5.3+ ...
define('MYSCRIPT_ROOT', dirname(__DIR__));

// ... do some stuff here

include MYSCRIPT_ROOT . '/includes/myinclude.php';

Все, что мы здесь делаем, это добавляем вызов dirname (), который удаляет каталог в пути. См .: http://us.php.net/manual/en/function.dirname.php

0 голосов
/ 25 сентября 2011

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

, например

include_once dirname(__FILE__) . '/../include.php';

dirname: вернет часть каталога пути

__FILE__: магическая константа, она замененапо пути текущего файла.

Единственная проблема, связанная с тем, что вы блокируете структуру вашего проекта, но в большинстве случаев это приемлемо.

...