Intereting Posts
Как экспортировать изображение из урожая в php для загрузки? Объединение массива и ассоциативного массива Имеет ли смысл определение функции? Есть ли способ заставить PHP постепенно выводиться по мере выполнения скрипта? Не удалось записать данные сеанса, php и memcached Как сохранить модель ID на другой странице модели в Cakephp 2 Оверлей / оповещение фона JQuery без события .onclick – ответчик php? SELECT * из таблицы SQL с помощью подготовленного оператора Найти все ключи второго уровня в многомерном массиве в php Чтение удаленного размера файла с использованием размера файла Mysql, PDO – как инструкция не работает с помощью bindParam Загрузка файлов PHP не читает $ _FILES Laravel: Получить объект из коллекции по атрибуту выберите строки, где одинаковые значения столбца начинаются со строки, 2 вопроса Остановить загрузку вредоносных файлов PHP через формы

PHP: атоматические включают

Я использую много файлов include для включения моих 191 файлов с набором функций, классов ect.

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

Поэтому мне было интересно, есть ли функция включения php или собственной библиотеки, которая включает в себя все файлы php в папке или даже лучше в своей собственной папке + все ее подпапки.

Эти вещи делают жизнь намного проще и гибко.

Вы можете использовать следующую функцию, которую я только что создал:

 function load_folder($folder, $ext = '.php') { foreach (glob("$folder*$ext") as $file) { if (file_exists($file)) { require_once($file); } } } 

НАЧАТЬ РЕДАКТОР

Это новая версия той же функции. Теперь он позволяет вам указывать папки как folder или folder/ без сбоев. Также теперь он загружает все файлы во все папки и подпапки.

 function load_folder($dir, $ext = '.php') { if (substr($dir, -1) != '/') { $dir = "$dir/"; } if($dh = opendir($dir)) { $files = array(); $inner_files = array(); while($file = readdir($dh)) { if($file != "." and $file != ".." and $file[0] != '.') { if(is_dir($dir . $file)) { $inner_files = load_folder($dir . $file); if(is_array($inner_files)) $files = array_merge($files, $inner_files); } else { array_push($files, $dir . $file); } } } closedir($dh); foreach ($files as $file) { if (is_file($file) and file_exists($file)) { $lenght = strlen($ext); if (substr($file, -$lenght) == $ext) { require_once($file); } } } } } 

END EDIT

Вы также можете указать конкретное расширение, если хотите загрузить, например, только файлы .txt в папке, которую вы можете выполнить, следующим образом: load_folder('folder/', '.txt'); , Помните, что кто-то думает, что это как-то небезопасно. Прежде чем использовать эту функцию внутри бизнес-сайта, найдите больше мнения о теме. Также обратите внимание, что если некоторые из ваших файлов относятся к классам, вы можете использовать встроенную функцию PHP __autoload() чтобы PHP вызывал класс, где он действительно нужен (ленивая загрузка).

Рекомендации:

  • Автозагрузка классов

Если у вас есть стандарт между именами классов и файлами, вы можете использовать __autoload() . Это сэкономит вам много всего.

http://php.net/manual/en/language.oop5.autoload.php

У вас может быть только файл «meta-include» с отдельными операторами include, а затем вы включаете только один файл в свои скрипты.

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

Обычно я требую как first application_top.php с этим:

 ... function requireAll($folder){ // open the folder $libs = opendir($folder); // loop inside to include each file, excluding windows default 'meta-link' . and .. while ($lib = readdir($libs)) { if ($lib != "." && $lib != "..") // require_once to be sure to require only one time require_once $folder . $lib; } // close the dir for cleaning stuff closedir($libs); } //Require all helpers requireAll(DIR_HELPERS); //Require all model classes requireAll(DIR_MODEL); //Require all mappers requireAll(DIR_MAPPERS); ...