Как определить: скрипт исполняется локально или на сервере?

general

Новичок
Обычная ситуация - отладка происходит локально - на Денвере, сайты - соответственно размещаются о провайдера.

Понятно, что конфигурационные данные будут разные. Обычно в config.php встраивается определитель, где исполняется скрипт - локально или "в интернете".

Уже лет 10 я делаю это так:

PHP:
if (!(($_SERVER['SystemRoot'])=='C:\WINDOWS')) {
...
}
Но недавно перешел с Windows XP на Windows 7 - и оказалось, что в семерке SystemRoot определяется как 'C:\Windows'.

Понятно, что поменять это на всех локальных проектах - дело нескольких минут.

Но вот задумался, а правильно ли таким путем определять локальный компьютер. Подскажите, как это делаете вы.
 

tz-lom

Продвинутый новичок
вы уже 10 лет страдаете фигнёй используя денвер (и вантуз) , поздравляю
технически php может быть запущен из консоли, или из сервера (mod_php , fcgi) , это можно определить по sapi , см php_sapi_name , но спрашиваете вы не об этом

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

а вообще - не хотите эксклюзивно отлаживать свой код на сервере после того как он заработал на локальной машине - используйте одинаковое окружение
 

Духовность™

Продвинутый новичок
вы уже 10 лет страдаете фигнёй используя денвер (и вантуз) , поздравляю
причем тут Денвер вообще? отстаньте от Денвера. это хороший и удобный комплекс.

а суть в том что скриптам должно быть всё равно , на "локальном" или "в интернете" они исполняются, не представляю условий когда бы это вообще имело смысл, и тем более нет таких случаев когда это нужно определять автоматически,а не через конфигурации
Понятно, что конфигурационные данные будут разные. Обычно в config.php встраивается определитель, где исполняется скрипт - локально или "в интернете".
general
привязка к имени домена ($_SERVER['HTTP_HOST']) не катит?
 

tz-lom

Продвинутый новичок
причем тут Денвер вообще? отстаньте от Денвера. это хороший и удобный комплекс.
неполноценности

смысл писать под одно окружение и запускать под другим, радикально другим ?
 

general

Новичок
Как это не катит? У тебя что, на локалхосте тестовый домен в точности совпадает с доменом интернета?
Да. Я обычно так делаю. Включил Денвер - работает локально. Выключил (всего-то - нажатие одной клавиши) - работает удаленно. Почему так? Просто на переменную ($_SERVER['HTTP_HOST']) бывает много чего завязано, и поэтому ради нее делаю имена доменов локально и удаленно - идентичными.
 

Духовность™

Продвинутый новичок
Либо я дурак, либо лыжи не едут.
Автор четко дал понять, что смотрит на окружение и в зависимости от того, какая это ОС, использует иные данные конфигурации.
Автор завязывается на переменной $_SERVER['SystemRoot'], что глупо. Завязываться надо на домене:

PHP:
if ($_SERVER['HTTP_HOST'] == 'localhost') {
	// настройки для localhost 
} else {
	// настройки для боевого сервера 
}
если такой вариант не катит, просто создайте инклюд файла config.phpб который на боевом и на локальном будет отличаться.

Всё.
 

Духовность™

Продвинутый новичок
Да. Я обычно так делаю. Включил Денвер - работает локально. Выключил (всего-то - нажатие одной клавиши) - работает удаленно. Почему так? Просто на переменную ($_SERVER['HTTP_HOST']) бывает много чего завязано, и поэтому ради нее делаю имена доменов локально и удаленно - идентичными.
Пиздец, идиотизм. Т,е. что бы после правки на локалхосте и потребности проверить изменения на боевом, ты денвер отключаешь?

В идеале не надо ничего завязывать на $_SERVER['HTTP_HOST']. Константу IS_LOCAL не судьба ввести?
 

scorpion-ds

Новичок
Завязываться надо на домене:

PHP:
if ($_SERVER['HTTP_HOST'] == 'localhost') {
	// настройки для localhost 
} else {
	// настройки для боевого сервера 
}
Сужу по себе ..., у меня localhost не используется, а используется к примеру host1.loc, host2.loc или что-то подобное, менять для каждого проекта это условие как-то не хотелось бы.

если такой вариант не катит, просто создайте инклюд файла config.phpб который на боевом и на локальном будет отличаться.
.
Я просто не копирую файл config.php с локального на боевой (на боевом лежит свой), по моему самое просто и рабочие решение.
 

Духовность™

Продвинутый новичок
Я просто не копирую файл config.php с локального на боевой (на боевом лежит свой), по моему самое просто и рабочие решение.
угу. там в принципе только настройки подключения к субд и, возможно, выключение ошибок в output.
 

denisOg

Новичок
угу. там в принципе только настройки подключения к субд и, возможно, выключение ошибок в output.
у меня лично в cfg еще константы прописаны. я использую два конфига (локальный и глобальный) с разными подключениями. Неудобство в том, что добавляя константу нужно это делать в два конфига сразу
Модно конечно конфиг разделить на подключение в БД и все остальное. наверно так и сделаю...
 

antson

Новичок
Партнер клуба
general
Отлаживай, как тебе удобней. В конце концов это дело вкуса и огромного холивара.
А проверить можно второй символ в строке $_SERVER['HTTP_HOST']. Под виндой там двоеточие ;)
 

SiZE

Новичок
может в confiig.php прописать что то типа define( 'DEBUG', N ); где N значит 0-выключен, 1-боевая машина, 2-тестовая.
 
Сверху