Почему я не могу использовать переменную в своем требовании или включении в XAMPP? - PullRequest
0 голосов
/ 31 июля 2009

При очистке некоторых старых php-скриптов я заметил странное поведение с инструкциями require / include при попытке использовать переменные.

На живом сервере следующий код работает нормально ..

<?php
$test = "http://localhost/elearning/trunk/mypage.php";
require "$test";
?>

.. но при моей установке XAMPP ((основной пакет) версия 1.6.7) я получаю следующую ошибку:

Предупреждение: require () [function.require]: доступ к файлам URL отключен в конфигурации сервера в C: \ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ магистраль \ test.php на линии 22 * ​​1008 *

Предупреждение: требуется (http://localhost/elearning/trunk/mypage.php) [function.require]: не удалось открыть поток: не удалось найти подходящую оболочку в C: \ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php в строке 22 * ​​1012 *

Неустранимая ошибка: require () [function.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 \ имя пользователя \ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php в строке 22 * ​​1016 *

Если я скопирую + вставлю http://localhost/elearning/trunk/mypage.php (прямо из ошибки) в мой браузер, загрузится mypage.php. Это ошибка в моей конфигурации или мой подход?

Ответы [ 4 ]

3 голосов
/ 31 июля 2009

Вы не можете использовать пути, начинающиеся с http: // на некоторых серверах из-за безопасности. Вместо этого вы хотите использовать путь к каталогу.

Вы можете получить текущий путь к каталогу, выполнив что-то вроде
echo $_SERVER['DOCUMENT_ROOT'];

, который даст вам путь вашего каталога из корневой папки сервера. Это путь, который вы хотите использовать, чтобы включить / потребовать материал.


Если вы не совсем поняли, попробуйте это.

Существует два типа путей:

Пути в World Wide Web:
http://example.com/directory/file.php

Путь к каталогу сервера:
/ Главная / USR / WWW / сайт / html /

Путь к каталогу сервера - это место, где ваши файлы находятся на жестком диске сервера. Как и жесткий диск вашего компьютера, он никогда не меняется, если вы не переместите файлы. С другой стороны, путь World Wide Web (тот, который каждый использует для доступа к вашему веб-сайту) может меняться в зависимости от того, какой домен вы используете, куда указывает ваш корень документа, перезапись модов и т. Д.

Примечание. Корень документа - это самый верхний каталог, из которого ваш сервер обслуживает файлы. Итак, если у вас есть index.php в корне документа, он будет отображаться в Интернете следующим образом: http://example.com/index.php.

Когда PHP ищет файл, он использует путь к каталогу сервера, потому что он работает на сервере. Когда Javascript, который запускается с компьютера пользователя, хочет найти файл, он использует путь к World Wide Web для доступа к нему, потому что он не обращается к нему с сервера.

Я действительно надеюсь, что где-то там что-то имело смысл.

1 голос
/ 31 июля 2009

PHP не настолько умен, чтобы знать, что вы подключаетесь с одного и того же сервера, когда используете такую ​​нотацию URL, поэтому он считает, что вы получаете файлы с отдельного сервера (что может быть опасно).

Ваша конфигурация сервера настроена так, чтобы запрещать загрузку этих внешних файлов (что видно по сообщению об ошибке «Доступ к файлу URL отключен в конфигурации сервера»), поэтому происходит сбой.

Поскольку вы находитесь на одном сервере, вы можете просто использовать относительные пути, например:

require_once 'mypage.php'
1 голос
/ 31 июля 2009

попробуйте потребовать "./mypage.php" не весь точный каталог

0 голосов
/ 31 июля 2009

Не используйте такой путь ... используйте относительный или абсолютный путь.

Пример

require 'mypage.php'
...