Варианты
1. настроить сфинкс на xmlpipe, сгенерировав пыхом нужные данные
2. сделать хранимку в СУБД и дергать ее из сфинкса
3. изменить структуру БД и хранить для каждой категории весь путь до корневой категории
Такое ощущение, что вы хотите в будущем выбирать задачи исходя из языка программирования, который знаете. Это не очень правильно - надо выбирать язык и технологию исходя из задачи.
После нескольких лет опыта уже можете не спрашивать на тостере такие вопросы, а сами решать что вам больше нравиться и куда расти.
Опция FollowSymLinks разрешена, что позволяет Apache видеть cим - линки для обслуживания запроса, даже если файл не входит в каталог, содержащий Web-файлы.
Есть расширение для пыха www.php.net/manual/en/class.thread.php, но я не в курсе его качества. Один поток блокирующее читает, другой делает нужные дела 20 раз в секунду.
Была аналогичная задача, с пыхом многопоточность не очень дружит, я написал прослойку на C++
Делать отладку на продакшене зло.
Покрывайте код автотестами, нагрузкой и пользуйтесь xdebug.
Потому как другой вариант - логирование. Но вот оно на нагрузке не работает, даже если вы мастер регулярок.
В вашем случае можно попробывать разнести логику по поведениям, либо просто сделать базовый класс модели User (в котором прописываете правила и поведение для всех пользователей) и наследоваться от него типа AdminUser extends User, Moderator extends User и тд
Можете даже фабрику сделать, чтобы например по определенному полю в бд инстанцировалась нужная модель.
Так же можно использовать job сервера в блокирующем режиме. Так как воркер обычно постоянно висит в памяти, инициализация тяжелых объектов происходит единижды.
Таким образом, при написании небольшой прослойки получается объект с данными и любой логикой их подготовки для клиентского кода.
SELECT c.name
FROM cabinets c
WHERE NOT EXISTS(
SELECT cabinet_id
FROM busy b
WHERE
b.cabinet_id = c.id AND ( b.date_start < $e AND b.date_end > $s )
)