2012-09-09 3 views
1

최근에 내 웹 사이트 파일을 어떤 경로에서 작동하는 파일로 변환하려고 시도했습니다. 가상 호스트를 사용하여 동일한 기본 서버에서와 동일한 .htaccess 파일을 유지 관리 할 수 ​​있도록 노력하고 있습니다. 내 모델을 모두 포함하는 초기화 파일은 동적으로 작성되므로 정확한 시스템 파일 경로를 찾고 이에 따라 웹 사이트를 업데이트하므로 어디서나 전체 웹 사이트를 업로드 할 수 있습니다.PHP에서 동적 구성 파일을 사용하는 것이 잘못된 이유는 무엇입니까?

문제는 config 파일에 있습니다. 내가 dev에 있는지 또는 prod에 있는지에 따라 differert 데이터베이스에 연결합니다. 따라서 로컬 서버를 실행 중인지 먼저 확인하는 작은 검사가 있습니다. 내 dev에 대한 내 명명 규칙을 배열에 저장하고 배열을 반복하여 HTTP_HOST가 값과 일치하는지 확인함으로써이 작업을 수행합니다.

예 : 나는 그가이 작업을 수행하지 다른 일, a respected user told me 채팅이에 언급

그러나
$dev_names = array('localhost','.dev'); 

. 대신 그는 2 개의 설정 파일을 가지고 있으며 적시에 올바른 설정 파일을 포함하고 있습니까? 내 접근 방식에 문제가 있었지만 나는 얻지 못했습니다.

내 계획에서 전문가를 이해하는 데 도움이되는 결함을 지적 할 수 있습니까?

(가 PHP 또는 무엇이든에 작성된 경우 PS. 당신은 부트 스트랩 작품, 그 단어를 들어 본 방법에 아래로 나에게 빠른 실행을 줄 수있는 보너스의 경우는 약 확실하지 던져지는.)

+1

참조 : http://stackoverflow.com/q/ 217594/911182 – Herbert

+0

@Herbert 완벽하고, 내가 뭘 찾고 있는지! –

+0

도와 주시면 기쁘게 생각합니다. 내가 준 링크는이 페이지의 오른쪽에있는 __Related__ 링크 목록의 첫 번째 링크입니다. 또한 질문을 입력 할 때 _ 답변이 이미있는 _ 질문을 확인하십시오. 목록에 없을 수도 있지만 일반적으로 시작하기에 좋으며 중복을 방지하는 데 도움이됩니다. – Herbert

답변

2

내가보고 해달라고 당신의 접근 방식에 문제가 있으면, 그것을하지 않는 좋은 이유를 생각할 수 없습니다.

개인적으로 나는 이것을 내 PHP 파일에서 수행합니다.

if ($_SERVER['SERVER_NAME'] == 'localhost') 
{ 
    define('ENVIRONMENT', 'development'); 
} 
else 
{ 
    define('ENVIRONMENT', 'production'); 
} 

그리고 나서 내 모든 설정이 중단됩니다. 매우 잘 작동합니다 - Dev & production 사이를 이동할 때 문자 그대로 설정 변경이 없음을 의미합니다.

+0

하지만 가상 호스트를 사용하고 로컬의 사이트가 mysite.dev라고하면 어떻게됩니까? –

+0

그래서 $ _SERVER [ 'SERVER_NAME'] 필드를 원하는대로 변경하십시오. 즉, $ _SERVER [ 'SERVER_NAME'] == 'mysite.dev' – Laurence

+0

예. 끝내기 '.dev'를 확인합니다. 단지 우리가 같은 파장을 가지고 있는지 확인하고 싶었습니다! –

1

나는 그가 당신의 사이트를 이식하기위한 시도가 실제로 모든 휴대용이 아니라고 생각합니다. 새 서버로 이동하는 경우 구성 파일을 편집해야합니다.

특히 이것은 구성 파일을 일종의 버전 제어 시스템으로 확인하고 다른 사람에게 영향을 줄 때 문제가됩니다. 이상적으로,이 같은 것을 사용합니다 :

<?php // global config file which is checked into VCS 
    $SETTING = "FOO"; 
    @include "config/local_settings.php"; // overrides go here 
?> 

는 로컬 파일에 모든 로컬 설정 재정의를 넣어, 그리고 VCS에 커밋하지 않습니다. 다른 사용자에게 사용자 정의가 필요한 부분에 대한 정보를 제공하려면 local_settings_example.php과 같은 것을 쓰는 것이 가장 일반적입니다. 관대 한 느낌이 들면 주석이 달린 예제로 채울 수 있습니다.

+0

왜 새 서버로 이동하면 설정 파일을 편집해야합니까? 그리고 두 개의 설정 파일을 갖는 것이 어떻게 도움이 될까요? –

+0

이 인수는 주로 버전 제어에 기반합니다. 즉, 저장소로서의 if 문을 변경하기위한 인덱스로 작동하는 * .php를 편집해야합니다. 휴대용 "으로 보일 수 있습니다. – dbf

1

내가 선호하는 설정에서 2 센트 밖에 쓸 수 없습니다. 주로 원하지 않는 버전 제어 덮어 쓰기 또는 충돌을 방지합니다. 필자가 생각하기에 서버는 프로덕션 서버인지 개발 서버인지 결정해야하며 스크립트의 변수는 변경해야합니다. 아래 예와 같은 접근 방식을 사용하면 완전히 다른 개발 환경에서 개인 환경을 설정할 수도 있습니다.

생산 또는 개발 환경을 확인하는

$_SERVER['SERVER_ADMIN']; 

변수

를 설정하여 시작.실제적으로 존재하지 않는 @ dev.elop.loc과 같은 가짜 도메인 (예 : [email protected])을 사용하여 자신의 이름으로 로컬. 이런 식으로

// environment development check 
function __env_dev($check) { 
    return substr($_SERVER['SERVER_ADMIN'], -(strlen($check))) === $check; 
} 
// false = production 
// true = development 
__env_dev("@dev.elop.loc"); 

을 결정할 수 있습니다. 내 경험상, 프로덕션 서버는 항상 SERVER_ADMIN 변수를 설정합니다 (그렇지 않은 경우 실제 [email protected]이어야 함에도 불구하고 실제 주소로 기본 [email protected]을 피함). 라이브 서버에 대한 지원이 자체 서비스/유지 관리에있는 경우 개발 서버와 구별하기 위해 실제 주소로 변경하는 것이 큰 문제는 아님)

관련 문제