PHP включает, когда «корневой слеш» предшествует включенному пути, например: «/folder/file.php» - PullRequest
2 голосов
/ 20 марта 2011

Для загрузки файлов, таких как css или javascript изображений, я научился добавлять дополнительную безопасность и добавлять дополнительные / перед папками, следя за тем, чтобы эти файлы загружались из папки, начиная с корневого пути внизwards:

например, /images/photo.jpg
, например, /scripts/script.js e.g. / layout / css.css`

Теперь, когда я делаю тот же трюк в PHP, кажется, что файл не загружается тогдадобавлена ​​косая черта!

<? include ("/folder/file.php"); ?>     // include this file

Когда я удаляю этот / в начале пути, все это работает, но затем Dreamweaver говорит, что не может найти файл!Когда я добавляю /, Dreamweaver МОЖЕТ найти удаленные ресурсы / файл, но при работе сайта файлы не включаются хорошо.

Ответы [ 3 ]

4 голосов
/ 20 марта 2011

Файлово-ориентированные функции PHP (включают, требуют, fopen, opendir и т. Д.) Обычно ожидают, что имеют дело с путем к файловой системе. То есть путь на локальном сервере без посредничества через веб-сервер.

Это не означает, что вы не можете предоставить полный абсолютный URL-адрес для функций, но в целом, если у вас нет чего-то, похожего на URL (протокол: // хост / путь? Запрос # фрагмент), это будет интерпретироваться как нечто в локальной файловой системе.

Поэтому, когда вы добавляете / перед включаемым путем, он рассматривается как абсолютный локальный путь, начиная с верхней части локальной файловой системы.

Без начального / он рассматривается как относительный путь, и PHP будет перебирать свой путь включения, чтобы попытаться найти файл на основе include_path + file_to_include.

3 голосов
/ 20 марта 2011

Путь, начинающийся с /, обычно интерпретируется как абсолютный путь (относительно среды). Таким образом, Dreamweaver может интерпретировать root (то есть /) как корневой путь проекта, тогда как сервер Unix (и как php, который на нем работает) интерпретирует этот путь как корневой в системе каталогов. А в HTTP он обычно ссылается на корень документа текущего домена.

Лучшим решением было бы просто использовать относительные пути, то есть пути, начинающиеся с ., например ../../folder/file.php.

2 голосов
/ 20 марта 2011

Если вы хотите включить файл в то, что мы думаем о «локальном пути URL», общая идиома для этого:

 include("$_SERVER[DOCUMENT_ROOT]/folder/file.php");

(Это совершенно правильный синтаксис в стиле PHP3. Но сейчас "{$_SERVER['DOCUMENT_ROOT']}" читается чаще. Но без разницы.)

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