Почему я не могу использовать переменную в инструкции require или include в XAMPP?

StackOverflow https://stackoverflow.com/questions/1210179

  •  06-07-2019
  •  | 
  •  

Вопрос

При очистке некоторых старых 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'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top