PHP включить файл - PullRequest
       16

PHP включить файл

0 голосов
/ 28 октября 2009

у меня есть два файла: (localhost / template /)

index.php 
template.php

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

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

Ответы [ 5 ]

5 голосов
/ 28 октября 2009

Метод include работает с путем к файловой системе, а не с путем URL. Решение - либо

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

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

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

4 голосов
/ 28 октября 2009

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

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

dirname ( FILE ) переведет в каталог текущего скрипта (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 / bar / index.php без использования центрального скрипта, вам нужно как-то найти шаблоннезависимо от того, где вы находитесь.

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

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

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

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

1 голос
/ 28 октября 2009

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

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

1 голос
/ 28 октября 2009

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

0 голосов
/ 28 октября 2009

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

...