Проблемы с получением PHP включают работу с файлами в разных папках - PullRequest
1 голос
/ 19 июня 2011

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

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

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

Джон

Ответы [ 2 ]

7 голосов
/ 19 июня 2011

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

// 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");
4 голосов
/ 19 июня 2011

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

/home/www/head.php

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...