Я полный 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 ).
Если вы действительно хотите, чтобы ваши важные файлы были сверху, вы могли бы использовать знак подчеркивания _
.