Почему я не могу использовать переменную в инструкции require или include в XAMPP?
Вопрос
При очистке некоторых старых PHP-скриптов я заметил странное поведение операторов require/include при попытке использовать переменные.
На реальном сервере следующий код работает нормально.
<?php
$test = "http://localhost/elearning/trunk/mypage.php";
require "$test";
?>
... но при установке XAMPP ((базовый пакет) версии 1.6.7) я получаю следующую ошибку:
Предупреждение:require() [функция.require]:Доступ к файлам по URL-адресу отключен в конфигурации сервера в C:\Documents and Settings\username\Desktop\xampp-win32-1.6.7\xampp\htdocs\elearning runk est.php в строке 22.
Предупреждение:требовать(http://localhost/elearning/trunk/mypage.php) [функция.требовать]:не удалось открыть поток:не удалось найти подходящую оболочку в C:\Documents and Settings\username\Desktop\xampp-win32-1.6.7\xampp\htdocs\elearning runk est.php в строке 22
Фатальная ошибка:require() [функция.require]:Требуется неудачное открытие 'http://localhost/elearning/trunk/mypage.php' (include_path='.;C:\Documents and Settings\username\Desktop\xampp-win32-1.6.7\xampp\php\pear\') в C:\Documents and Settings\username\Desktop\xampp-win32- 1.6.7\xampp\htdocs\elearning runk est.php в строке 22
Если я скопирую+вставлю http://localhost/elearning/trunk/mypage.php (прямо из ошибки) в мой браузер, загружается mypage.php.Это ошибка в моей конфигурации или моем подходе?
Решение
Из-за безопасности нельзя использовать пути, начинающиеся с http: // на некоторых серверах. Вместо этого вы хотите использовать путь к каталогу.
Вы можете получить текущий путь к каталогу, выполнив что-то вроде
echo $ _SERVER ['DOCUMENT_ROOT'];
, который даст вам путь к каталогу из корневой папки сервера. Это путь, который вы хотите использовать, чтобы включить / потребовать материал. Р> <Ч>
Если вы не совсем поняли это, попробуйте это.
Есть два типа путей:
Пути к всемирной сети:
http://example.com/directory/file.php
Пути к каталогам сервера:
/ Главная / USR / WWW / сайт / html /
Путь к каталогу сервера - это место, где ваши файлы находятся на жестком диске сервера. Как и жесткий диск вашего компьютера, он никогда не меняется, если вы не переместите файлы. С другой стороны, путь World Wide Web (тот, который каждый использует для доступа к вашему веб-сайту) может меняться в зависимости от того, какой домен вы используете, куда указывает ваш корень документа, перезапись модов и т. Д.
Примечание. Корень документа - это самый верхний каталог, из которого ваш сервер обслуживает файлы. Итак, если у вас есть index.php в корне документа, он будет отображаться в Интернете следующим образом: http://example.com/index.php .
Когда PHP ищет файл, он использует путь к каталогу сервера, потому что он работает на сервере. Когда Javascript, который запускается с компьютера пользователя, хочет найти файл, он использует путь к World Wide Web для доступа к нему, потому что он не обращается к нему с сервера. Р>
Я действительно надеюсь, что где-то там что-то имело смысл.
Другие советы
попробуйте потребовать " ./ mypage.php " не весь точный каталог
PHP недостаточно умен, чтобы знать, что вы включаете файлы с одного и того же сервера, когда используете такую нотацию URL-адресов, поэтому он думает, что вы захватываете файлы с отдельного сервера (что может быть опасно).
Конфигурация вашего сервера настроена на запрет загрузки этих внешних файлов (о чем свидетельствует сообщение об ошибке «Доступ к файлам по URL-адресу отключен в конфигурации сервера»), поэтому происходит сбой.
Поскольку вы находитесь на одном сервере, вы можете просто использовать относительные пути, например:
require_once 'mypage.php'
Не используйте такой путь...используйте относительный или абсолютный путь.
Пример
require 'mypage.php'