Абсолютный путь php vs относительный
Встречал на каком-то форуме вопящего эксперта по поводу того что абсолютный путь php практически не отличается по скорости, и мол используйте в php относительный путь к файлу и не заморачивайтесь, всё это экономия на спичках..
Как часто бывает товарищ не проявил здравомыслия и не опробовал этот момент на практике, давайте разберёмся почему абсолютный путь к файлу php лучше на фактах. Нам поможет в этом трасерт выполнения скрипта, смотрим что происходит при команде php include относительный путь:
lstat("/home/fsen/public_html/./tpl/inс/vars_ru.php", 0x7fffb2418ae0) = -1 ENOENT (No such file or directory) lstat("/usr/lib/php/tpl/inс/vars_ru.php", 0x7fffb2418ae0) = -1 ENOENT (No such file or directory) lstat("/usr/local/lib/php/tpl/inс/vars_ru.php", 0x7fffb2418ae0) = -1 ENOENT (No such file or directory) stat("/home/fsen/public_html/inс/tpl/inс/vars_ru.php", {st_mode=S_IFREG|0644, st_size=306, ...}) = 0
Абсолютный путь однозначно лучше относительного!
Как мы можем увидеть php заменяет пути не с помощью особой магии, а физически проверяя существование файла по указанному php пути, причём не просто проверяя существование, а пытаясь собрать блок данных из 14 свойств ищите в поисковике man lstat. При этом, в случае пролёта относительного пути, начинает искать сначала в библиотеках (в попытке подгрузить), это связанно с подгрузкой классов из php библиотек. Таким образом имеем 3 пустых обращения к диску и на 4-й только успех, теперь перемножьте на добрый десяток этих путей во всём проекте. Спасает ситуацию только то, что результаты функции lstat кэшируются. Так что смело используйте $_SERVER['DOCUMENT_ROOT'] перед открытием скрипта, это никак не экономия на спичках!
Признаться, когда всё это завертелось с написанием своего движка, о таких вещах не задумывался, стояли сроки создания сайта, соответственно приходилось максимально быстро решать вопросы, со временем всё это начало волновать и многое было переделано.