Подскажите как лучше подключать фалы, а именно пусть к файлу

doran7

Новичок
Фанат написал(а):
И если один идиотский форум с этим работает, то это не повод пихать как рекомендацию всем подряд.
Убери, кстати, его из подписи. еще не хватало этот хлам здесь рекламировать.
Маэстро, за что так бедного меня жестоко... :( ... Я вообще не настаивал ни на каких рекомендациях, насчет dirname(__FILE__), чайник я еще... Я просто привел один из возможных рабочих вариантов. Насколько он лучше/хуже других способов - я не знаю, и ничего такого не утверждал.

Насчет движка форума - если есть инфа о его недостатках - очень хотелось бы об этом узнать. И чем больше негативной инфы - тем лучше. Я его здесь совсем не рекламирую, да это и бесполезно среди такой аудитории - я просто ищу соратников, которые работают с этим же движком. Я в одной теме об этом прямо и написал. Кстати, с ним и профи PHP работают. К сожалению, этот движок в рунете малопопулярен, поэтому найти людей для общения по нему на русском - совсем нелегко... А на английском я уже замучался все выяснять.. Движок этот не брошу, потому что он хороший...:)
 

Фанат

oncle terrible
Команда форума
Фанат, воу, воу, палехче. __DIR__ как раз-таки даст
Научись сначала отличать абсолютный путь ("Красных Комиссаров, 16") от относительного ("налево два квартала за углом во дворе").
А потом поговорим.
 

shelestov

я тут часто
Раз тут такой разговор.
Кто нибудь может объяснить такое поведение:
PHP:
var_dump(include "2.php");
var_dump(include dirname(__FILE__) . "/2.php");
var_dump(include "./2.php");
#php 1.php
PHP:
int(1)
int(1)
int(1)
#php ./directory/1.php
PHP:
int(1)
int(1)
int(false)
Я к тому что инклуд с относительным путем 2.php проходит нормально, а ./2.php обламывается.
Я так понимаю ./ дает указание на текущую директория, в то время как 2.php инклудится относительно директории скрипта.
 

Фанат

oncle terrible
Команда форума
Ок, ок, __DIR__ гарантирует тебе корректный путь относительно текущего скрипта, а не папки.
просто ололо-пхпшнечки почитают эту волшебную загогулину лекарством от всего и путают её с абсолютным путем. Хотя это всего лишь красивый способ написать относительный.

Если вспомнить про топикстартера, то он спрашивал конструкцию, которая работает "из любой папки". О чем и был мой ответ. Остальной топик ему никак не противоречит, но при этом не отвечает на вопрос.
 

Фанат

oncle terrible
Команда форума
Кто нибудь может объяснить такое поведение:
Если в этом скрипте какие-то проблемы с инклюдом, то пхп разразится потоком нецензурной брани АКА сообщений об ошибке.
Судить о проблемах инклюда следует по сообщениям об ошибках инклюда, а не путем наблюдения за непрямыми следствиями.
 

shelestov

я тут часто
Если в этом скрипте какие-то проблемы с инклюдом, то пхп разразится потоком нецензурной брани АКА сообщений об ошибке.
Судить о проблемах инклюда следует по сообщениям об ошибках инклюда, а не путем наблюдения за непрямыми следствиями.
Ошибка была, оно и понятно.
Я к различию инклуда 2.php и ./2.php.
В первом случае инклуд происход от директории со скриптом, а во втором от текущей директории.
Чтобы не было такого гемора как раз таки лучше и ставить dirname(__FILE__).

И я так же полностью согласен, что в случаях запуска не из консоли в большинстве случаев указание dirname(__FILE__) избыточно.
 

ksnk

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

shelestov

я тут часто
вот это жесть из жести, конечно. "ошибка была". Что за ошибка, чем вызвана, в чем её смысл - нас не интересует.
всё в точности как в той старой байке
Причем тут ошибка? Я просто сказал:
Я к различию инклуда 2.php и ./2.php.
В первом случае инклуд происход от директории со скриптом, а во втором от текущей директории.
Чтобы не было такого гемора как раз таки лучше и ставить dirname(__FILE__).
 

doran7

Новичок
Фанат написал(а):
Если вспомнить про топикстартера, то он спрашивал конструкцию, которая работает "из любой папки".
Не мое было предложение, но мне понравилось (код ниже).

Если в корне сайта расположить config.php, и в нем прописать:
PHP:
define('SITE_ROOT', dirname(__FILE__).'/');
- то пути, корректно прописанные через SITE_ROOT, и должны работать из любой папки.

Можно сделать проверку хостинга:
PHP:
define('SITE_ROOT1', $_SERVER['DOCUMENT_ROOT'].'/');
define('SITE_ROOT2', dirname(__FILE__).'/');
echo 'site root 1: '.SITE_ROOT1;
echo '<br> site root 2: '.SITE_ROOT2;
- убедиться что все в порядке.

Это скорее вопрос, чем какой-либо совет-рекомендация. Сам хочу понять как нужно делать правильно, чтобы все работало надежно и универсально.
 

keltanas

marty cats
О чем вообще спор?
Если проблемы с require/include, юзаем в index.php set-include-path()
В этом случае все эти DOCUMENT_ROOT и __DIR__ нафиг будут не нужны. Подключаете файл относительно любого из путей, указанных в include-path.
PHP:
require_once('articles/file.php');
Если надо найти файл чере file_exists() или file_get_contents(), то более корректного способа, чем через __DIR__ я, по крайней мере, не знаю.
 

ksnk

прохожий
Подключаете файл относительно любого из путей, указанных в include-path.
по моим воспоминания (php 4), включение файла через include_path ну очень сильно проигрывало в скорости простому поиску файла набором file_exists. Ситуация удивительна, так как include_path, по идее должен делать то же самое, только на С.
Как оно сейчас обстоит, на 5.3++?
 

ksnk

прохожий
А чо прикалываться-то? Я с 4-ки, как только мне открыли глаза на автолод, не пользуюсь инклюдами. Я ж не в курсах, они таки исправили с той поры торможение с поиском файлов по include_path или руки разработчиков занимают стабильное положение?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
А чо прикалываться-то? Я с 4-ки, как только мне открыли глаза на автолод, не пользуюсь инклюдами. Я ж не в курсах, они таки исправили с той поры торможение с поиском файлов по include_path или руки разработчиков занимают стабильное положение?
эээ, а автолоад работает на радуге и какашках единорогов?
 

ksnk

прохожий
автолод работает на подключении по абсолютному пути. Иначе от него ровно столько же торможений.
 
Сверху