2009-10-28 6 views
0

У меня есть два файла: (локальный/шаблон /)PHP включают файл

index.php 
template.php 

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

Я пробовал: include('localhost/template/template.php') без результата. как включить его? спасибо

ответ

4

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

require_once(dirname(__FILE__) . '/template.php'); 

имя_директории (ФАЙЛ) переведут в каталог текущего скрипта (index.php) и линии выше добавит '/template.php', что приведет к полному пути к template.php бок о бок к файлу index.php.

Я считаю, что лучше всего включать файлы таким образом против без полного пути, чтобы избежать проблем с пути поиска PHP, например. Это очень ясно.

ОБНОВЛЕНИЕ: Я неправильно понял исходный вопрос. Похоже, что template.php не копируется, а только index.php. Таким образом, вы будете иметь что-то, что может быть как:

template/template.php 
template/index.php (just a template) 
foo/bar/index.php 
foo/bar2/index.php 

Поскольку люди могут попасть в Foo/бар/index.php, например, не утекают через центральный сценарий, вы будете иметь, чтобы каким-то образом найти шаблон независимо от того, где ты.

Вы можете сделать это, установив PHP include_path, например, через .htaccess на сервере Apache:

php_value include_path ".:/home/<snip>/template" 

Затем в каждом index.php вы можете включить template.php, и он будет искать что-то сначала введите текущий каталог, а затем попробуйте создать каталог шаблонов.

Вы также можете вычислить относительный путь при копировании скрипта и поместить туда туда необходимое количество «..», чтобы выйти (например, «../../template/template.php»). Однако это довольно хрупко.

+1

Разве вам не нужно было настраивать этот путь, когда вы делали копию? Для меня это решение не сильно отличается от того, как включить в него относительный путь. – Svish

+0

Определяется во время выполнения, поэтому вам не нужно менять его при копировании каталога. Во время выполнения он вычисляет текущий файл, разбивает имя файла и добавляет template.php в конце. Это самый устойчивый и явный способ включить/потребовать файл на PHP, который я считаю. – wojo

+0

ОК, но мои файлы index.php будут динамически создаваться ... поэтому я мог бы иметь такую ​​структуру папок, как эта «articles/article_1/subfolder/index.php», и моя папка с шаблонами будет на том же уровне, что и «статьи», folder – kmunky

0

Путь выглядит неправильно, вы должны включить его с дорожкой относительно того, где находится вызывающий файл, например. include('template/template.php'); или include('../template/template.php');

5

Метод включения работает по пути файловой системы, а не по «пути URL». Решение должно быть либо

  • Дайте ему абсолютный путь.
    include('/some/path/to/template.php');

  • Измените относительный путь, чтобы он был правильным после создания каждой копии.
    - include('../../template.php');

  • Изменение include path РНР так, что файл находится, хорошо, включают в себя путь.
    - Может быть сделано либо в файле php.ini, либо в файле .htaccess, либо с помощью set_include_path function.(В зависимости от того, сколько вы хотите установить, и на что у вас есть разрешение)

1

Вы не хотите, чтобы в нем присутствовал «локальный хост». Включает работу с использованием фактического пути на вашем сервере. Таким образом, вы можете использовать относительные, например, опубликованные выше, или абсолютные с точки зрения сервера, так что это может быть «/ opt/www /» на linux или «c: \ Program Files \ Apache \ htdocs» в окнах. Это будет отличаться от системы к системе, чтобы узнать, как вы используете технику dirname(__FILE__), показанную wojo.

+0

'dirname (__ FILE __)' на самом деле не приведет вас ни к чему, что '.' не сможет вас достать (если я что-то не понял). – Svish

1

Если вы пытаетесь включить файл в качестве URL-адреса, вам необходимо запустить его с http:// и установить allow_url_include значение true в настройках PHP. Это сильно обескураживает, поскольку оно открывает двери для нарушений безопасности.

Вместо этого вы должны либо добавить localhost/template в свой путь включения, либо использовать относительные URL-адреса, например include ('../template.php').

+0

«Это очень обескураживает, поскольку оно открывает двери для нарушений безопасности». **в самом деле** – KyleFarris

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