2010-11-20 3 views
1

Как и многие программисты, у меня есть сервер, на котором я размещаю свои сценарии, и локальный хост, где я их создаю. Есть ли в PHP безопасный способ, чтобы сценарий отличался от них? SERVER_NAME работает, но может быть введена, поэтому не защищен. У кого-то есть решение? (Non-Static решение предпочтительнее)Где находится скрипт? Localhost или на сервере?

ответ

2

Вы можете использовать php_uname('n'), чтобы вернуть имя текущего хоста, и использовать это, чтобы решить, в какой среде вы находитесь, но нет большой выгоды для этого, просто определяя вашу среду в файле конфигурации. Вам нужно сделать это только один раз для каждой установки.

Я лично считаю, что самый простой способ, чтобы определить ENVIRONMENT символ как 'development', 'testing' или 'production' в конфигурационном файле, который исключен из системы управления версиями. Я включаю этот файл в какую-то часть моего проекта, а затем assert, чтобы определить символ ENVIRONMENT. Программа будет танком, если я проверил копию моего проекта и забыл создать файл конфигурации или указать среду внутри него.

Вы можете комбинировать эти подходы для определения ENVIRONMENT на основе имени хоста.

0

Я склонен проверять IP из $_SERVER['SERVER_ADDR'], или просто настройки конфигурации указывают, что есть что ..

0

Вообще в Apache каждый VirtualHost будет иметь определенный набор имен хостов и псевдонимов определенный для него. Это имя, которое вы получите из $ _SERVER ['HTTP_HOST'] и по существу является данными из заголовка Host: HTTP

Единственный раз, когда вам могут потребоваться дополнительные проверки для этого, когда ваш vhost является по умолчанию vhost, и поэтому запросы полей для доменов, не связанных с хостами хоста, или ваш vhost использует подстановочные знаки для ServerName или ServerAlias.

+0

HTTP_HOST отправляется браузером. Я говорил о безопасном решении! HTTP-заголовки не защищены;) – Simon

+1

@ Кевин, который только наполовину прав. Если я отправлю абсолютно неверный «HTTP_HOST», Apache будет (должен) не обслуживать правильный виртуальный хост. –

+0

Вы не должны доверять Apache, если вы не принимаете его самостоятельно. Кто знает, как настроена конфигурация? – Simon

0

это работает для меня

if ($_SERVER['HTTP_HOST'] == 'localhost') 
{ 
    // it is local host 
} 
+0

Пожалуйста, перечитайте вопрос. Это решение небезопасно, потому что пользователи могут изменять значение HTTP_HOST – Simon

+1

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

0

создать файл где-то из WWW. сделайте a if (file_exists («ВАШ FILE PATH»)) ...

дайте ему странное имя. в c: \ if ur на окнах или в/usr/home/if u находятся на linux

+2

Я бы А) не дал ему странного имени и B) не размещал его вне вашего проекта.Вы просто путаете вещи бесполезно. – meagar

+0

разница между веб-серверами и вашим локальным хостом заключается в том, что на веб-сервере нет установленных на нем игр (например), оборудования и любых других данных, которые не нужны на веб-сервере (ваши личные файлы), поэтому было бы неплохо создайте личный файл, который, когда он существует, означает ur в локальном хосте, иначе это означает его сервер, и никто не может создать такой файл на сервере специально, если он находится где-то в папке только для чтения, недоступной для apache или любой другой сервис. если кто-то может создать файл, значит, у него есть доступ к серверу, значит, безопасность ушла! –

0

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

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