от longnetpro
Цитата:
Путь включения в PERL и PHP всегда был сложной проблемой, в основном связанной с операционной системой и веб-сервером. Эту проблему пути невозможно решить очень разумно. По сравнению с PERL, путь PHP намного лучше, и его гораздо проще решить, поскольку относительный путь PHP может использоваться в программе PHP в любом случае, в отличие от PERL, где в определенных операторах необходимо использовать абсолютные пути, что приводит к чрезвычайной сложности трансплантации. .
Исходя из этого, на PHP я спроектировал абсолютно надежное решение, как описано ниже.
в принципе:
Используйте относительные пути, но используйте абсолютные пути внутри относительных путей (немного запутанно, подробно объяснено позже). Во-вторых, их можно легко изменить. В-третьих, они имеют четкую структуру и просты. расширяться.
Подробные шаги:
1. Сначала определите корневой каталог программы. Обратите внимание, что он находится в файловой системе, а не в виртуальном каталоге веб-сервера. Однако, как правило, относительный путь к подкаталогу в каталоге такой же, как и к виртуальному подкаталогу в каталоге. URL-адрес.
2. Создайте файл settings.php в каждом подкаталоге определенного корневого каталога программы (на самом деле не обязательно в каждом, в зависимости от необходимости) и определите в нем переменную или константу (константы лучше, потому что область действия больше), например APPROOT, но этот APPROOT не является абсолютным путем, а относительным путем к каталогу относительно указанного вами корневого каталога программы.
3. Напишите require_once('settings.php'); в первом предложении всех файлов записи программы в этом каталоге (то есть первый файл, содержащий другие файлы или файлы, которые позволяют прямой просмотр в браузере); обратите внимание, что лучше не добавлять это предложение ко всем включенным файлам - на самом деле его можно добавить, потому что вы можете написать if(!define(APPROOT)) define(APPROOT, '../. .'); Этот тип оператора предотвращает переопределение.
4. Если вы хотите включить другие файлы, прямо или косвенно, вы можете написать include(APPROOT.$path);, где $path — это абсолютный путь к включенному файлу относительно указанного вами корневого каталога программы.
принцип:
Определенный корневой каталог программы представляет собой относительный путь, но местоположение конкретного каталога является абсолютным путем относительно этого корневого каталога. Комбинация этих двух путей представляет собой относительный путь к конкретному файлу относительно корневого каталога программы. Например, каталог c:wwwrootapp — это указанный вами корневой каталог программы, а затем есть два файла c:wwwrootappaindex.php и c:wwwrootappbinc.php. . Для подкаталога a APPROOT — это «..», а для корневого каталога программы абсолютный путь к inc.php — $path='/b/inc.php», а комбинация этих двух — «../b». /inc.php'. Если вы хотите включить inc.php в index.php, вы должны написать include('../b/inc.php'); и не является ли этот путь просто путем APPROOT.$, который был только что объединен?
в заключение:
После вышеуказанной обработки каждый путь становится абсолютно аккуратным и единообразным. Единственное, что немного громоздко, это то, что APPROOT должен быть определен в каждом каталоге, но его нужно определить только один раз в файле settings.php этого каталога в каждом. каталог. Если вся ваша программа имеет только один входной файл, например index.php, а все остальные файлы прямо или косвенно включены в этот единственный входной файл, вам нужно только добавить settings.php в каталог, где находится index.php. это один раз и все в порядке. Если друг выполнил проект Delphi и изучил файлы проекта, он обнаружит, что ситуация, о которой я только что упомянул, когда программа имеет только один главный входной файл, очень похожа на проект Delphi, поскольку в Delphi есть только один главный файл программы (dpr file), остальные — это файлы модулей или файлы ресурсов, которые не могут выполняться независимо. В PHP, если такая ситуация возникает, вам нужно только один раз определить APPROOT и написать require_once('settings.php'); в первом предложении основного файла программы, и все последующие включения могут использовать include(APPROOT.$path) ;, проблем гарантированно не будет, если только вы не напишете вот это "включает абсолютный путь к файлу относительно корневого каталога программы" $path.
Я использовал этот метод не раз, с хорошими результатами. Кроме того, вы также можете обратиться к способу определения пути в WEB-INFO JSP.
Это шаблонный план, который остается неизменным в ответ на постоянно меняющиеся изменения. Если у кого-то есть план получше, пожалуйста, не стесняйтесь его обсудить! Если вам что-то непонятно, пожалуйста, не стесняйтесь спрашивать.