Проблема получения PHP включает работу с файлами в разных папках

Я полный PHP noob, и я использую довольно простой PHP:

<?php include("~head.php"); ?> 

сделать немного шаблонов для веб-сайта (для достижения общих заголовков, нижних колонтитулов, меню для всех моих страниц).

  • ПРИМЕЧАНИЕ. Тильда (~) просто там, чтобы упростить просмотр каталогов (подталкивает главные файлы в начало списка при сортировке по алфавиту)

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

 <?php include("../~head.php"); ?> 

Однако, похоже, он просто не находит файл, поскольку заголовок явно не втягивается в разметку.

И наоборот, если я ссылаюсь на файл с полным URL-адресом, например

 <?php include("http://example.com/~head.php"); ?> 

На моей странице появляется следующий код ошибки.

 Warning: include() [function.include]: URL file-access is disabled in the server configuration in /home/content/65/7392565/html/bikini/angela_bikini.php on line 1 Warning: include(http://example.com/~head.php) [function.include]: failed to open stream: no suitable wrapper could be found in /home/content/65/7392565/html/products/product_a.php on line 1 Warning: include() [function.include]: Failed opening 'http://example.com/~head.php' for inclusion (include_path='.:/usr/local/php5/lib/php') in /home/content/65/7392565/html/products/product_a.php on line 1 

Как ни странно, синтаксис «../file.php» работает для файлов без заголовка (например, include, которые я использую для меню).

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

Спасибо за ваше время.

Джон

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

 // Assuming you are including from the root $application_path = dirname(__FILE__); include("$application_path/../header.php); 

Обычно я делаю это, определяя константу, а не используя переменную.

 define('APP_PATH', dirname(__FILE__)); 

Используйте это как:

 // Assuming you are including at the file root: define('APP_PATH', dirname(__FILE__)); include(APP_PATH . "/include/head.php"); // Assuming you are including from /include (one directory in) // append a "/../" onto the end to indicate that the application // root is one directory up from the currently executing file. define('APP_PATH', dirname(__FILE__) . "/../"); include(APP_PATH . "somefile_at_the_root.php"); 

Вы должны быть осторожны с тильдой! В UNIX-подобных операционных системах тильда является ярлыком для вашего домашнего каталога. Если, возможно, сервер Apache работает под учетной записью www , ваша ссылка на файл может быть интерпретирована следующим образом:

 /home/www/head.php 

И для подхода использования полного URL-адреса, ошибка говорит все:

Доступ к URL-файлу отключен в конфигурации сервера

Игнорируя, что allow_url_include использовать полные URL-адреса (потому что ваша структура папок может измениться и т. Д.), Вам нужно включить allow_url_include в php.ini (см. PHP.net ).

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