PHP, Как установить include path

Я писал:

include('a.php') include('b.php') 

и т. д. в моем скрипте для включения в функции a() и b() . Это становится довольно утомительным. Есть ли способ установить путь к каталогу и иметь несколько файлов, доступных по сценарию?

  1. Я попробовал это в своем скрипте:

     set_include_path('.;C:\xampp\htdocs\myfunctionfolder'); 
  2. И я установил переменную окружения PATH, чтобы она была там старше.

  3. Я также в измененном php.ini, чтобы включить

     include_path = ".;\xampp\php\PEAR;\xampp\htdocs\myfunctionfolder" 

Если у меня есть много файлов, как мне получить доступ к этим файлам без необходимости включать их отдельно? Настройка переменной окружения определенно работает в командной строке.

Нужно ли мне делать что-то еще для .php-файлов, чтобы они были доступны вместе под каталогом?

Обычная практика заключается в том, чтобы иметь файл common.php или include.php, который включает вызовы include / include_once (для простоты). например

  • корень
  • [Lib]
    • a.php
    • b.php
    • includes.php
  • index.php

Затем includes.php содержит:

 <?php include_once('a.php'); include_once('b.php'); ?> 

Тогда в любом скрипте речь идет о включении файла includes.php .

Однако , чтобы ответить на ваш первоначальный вопрос, вы можете включать только один файл за раз, за ​​звонок. Вы можете использовать что-то вроде opendir и readdir для итерации по всем файлам в определенном каталоге и включать их как найденные (автоматизированные так readdir ) или выписывать каждый из них, включая вас, на основе создаваемых вами файлов.

Кроме того, при настройке пути include задается каталог для поиска, когда выполняется вызов include . Это не каталог, в котором файлы должны быть загружены автоматически (это впечатление, которое я получаю от вашего сообщения).

Установка include_path не будет включать в себя каждый файл в этом каталоге, он добавляет только этот каталог в список, который PHP будет искать при включении файла.

Задает список каталогов, в которых функции require (), include (), fopen (), file (), readfile () и file_get_contents () ищут файлы.

Источник

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

 include('/var/somewhere/else/foo.php'); 

С /var/somewhere/else/ добавленным в php.ini include_path, может стать

 include('foo.php'); 

Кроме того, как указывали другие, существуют общие практики, но вы можете изучить классы OOPHP и автозагрузки . Это не будет работать для функций, о которых я знаю.

Многие разработчики, пишущие объектно-ориентированные приложения, создают одно определение исходного кода PHP для каждого класса. Одно из самых больших неприятностей – писать длинный список необходимых включений в начале каждого скрипта (по одному для каждого класса).

В PHP 5 это больше не требуется. Вы можете определить функцию __autoload, которая автоматически вызывается в случае, если вы пытаетесь использовать класс / интерфейс, который еще не определен. Вызывая эту функцию, механизму сценариев дается последний шанс загрузить класс до того, как PHP завершится с ошибкой.

Парсер PHP довольно эффективен – вы потратите больше времени на загрузку тонны отдельных файлов вместо одного (или нескольких) более монолитных файлов. Однако, если вы настаиваете на том, чтобы такие вещи были разделены таким образом, вы можете создавать мета-файлы для загрузки наборов отдельных файлов, поэтому вы должны включать только один файл мета-include, и он делает остальное для вас:

meta.php:

 include('a.php'); include('p.php'); ... include('z.php'); в include('a.php'); include('p.php'); ... include('z.php'); в include('a.php'); include('p.php'); ... include('z.php'); 

И тогда вы просто делаете:

 <?php include('meta.php'); 

в ваших сценариях, и у вас есть все отдельные загруженные для вас.

У меня есть такая функция в большинстве моих проектов:

 function appendToIncludePath($path) { ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . BASE_DIR . $path . DIRECTORY_SEPARATOR); } 

см. этот вопрос:

Как включить () все файлы PHP из каталога?

Кроме того, с точки зрения передового опыта вы можете включить несколько функций в один и тот же файл, если они вообще связаны друг с другом, и я бы также предложил иметь более описательные имена ваших функций и файлов. Например, если ваши функции a () и b () связаны, например, с валидацией, назовите файл validation.php и поместите обе функции туда и попробуйте переименовать их в нечто, что связано с тем, что они делают. Это позволит вам помнить, что они делают, когда вы начинаете накапливать огромный список функций;)