define()
PHP 문법에는 특정한 값을 대입하여 사용할 수 있는 변수와 상수가 있습니다.
변수는 말 그대로 변할 수 있는 값이며, 상수는 변하지 않는 값입니다.
Case-insensitive는 문자의 대 소문자 구분이 없다는 뜻입니다. 즉 Case, CASE,case 모두 같은 의미로 취급합니다.
반대어로 Case-sensitive 가 있습니다.
PHP에서 상수를 정의하는 방법이 define(상수,값,대소문자구분) 함수로 문법은 다음과 같습니다.
define(name, value, case-insensitive)
define(name, value)
//=> 정규식 ===============>
define(‘_Test’,’안녕하세요!’,true);
echo _Test;
echo “<br>”;
echo _test;
// 대소문자구분 true에 의해 안녕하세요! 한번만 출력 됨//=> 구분없이 사용 =========>
define(‘_Test2′,’안녕하세요!’);
echo _Test;
echo “<br>”;
echo _test;
// 대소문자를 구분하지 않으므로 안녕하세요! 2번 출력 됨
보통은 변수를 사용하여 모든 값들을 처리하지만 값이 변경되면 안되는 특별한 고정값을 사용하고 싶을 때 상수로 지정하여 사용하게 됩니다.
자주쓰이는 상수설정 값들은 도메인, 파일위치, 디렉터리 경로, PATH 등 고유값으로 지정되어야 할 값들이 있습니다.
값이 변하면 안되는 고정 값 상수를 쓰는 이유는
페이지가 많은 경우 또는 코드가 파악하기 힘들정도로 긴 경우
작업자가 바뀌거나 다른작업자와 공동작업을 할 경우 가 있으며,
이러한 경우 실수 또는 협의가 안되어 고정값이 변경되는 것을 방지하여 오류를 줄이기 위해서 쓰입니다.
//=> 변수 =========================>
$test = 1; // $test라는 변수에 1이라는 값을 대입
echo $test; // 1 이 출력됨
$test = “하이”; // $test에 다른값을 대입
echo $test; // 변경 된 값인 하이 라는 문자가 출력 됨
// 문서의 어느 부위에서든 사용이 가능하며, 사용되는 부분을 기준으로 가장 최근에 지정된 값이 출력 됨//=> 상수 =========================>
define(‘_test’,’상수입니다.’); // 상수 _test 에 상수입니다. 값 대입
echo _test; // 상수입니다. 출력됨
define(‘_test’,’상수값 변경합니다.’); // 이미 지정한 상수값을 변경 하면?
echo _test; // 상수입니다.상수입니다. 출력 됨
// 상수값 변경 불가! 최초 _test에 등록된 값이 또 출력 됩니다.//=> 다른방법으로 변경하려 한다면,
_test = “상수값 변경”; // 실행안됨->오류메세지 출력(“요청을 처리할 수 없습니다.”)
// 소스오류로 실행되지않습니다.
위 예제처럼 상수로 정의된 값은 동일한 페이지 내에서 변경이 불가능합니다. 이쯤되면 왜 상수를 써야 하는지 감이 오시리라 생각합니다.
웹 개발 특성상 여러개로 분리해서 include 해서 작업하는데.. 만약 중간에 사용되는 변수인지 확인도 안해보고 새로운 변수라 생각하며 해당 변수의 값을 변경해버린다면, 이전에 작업된 소스에서도 그 값이 바뀌게 되어 전혀 다른 값이 출력되겠지요.
이러한 오류를 방지하기 위해 개발자들은 규칙을 정합니다.
상수는 common 이나 header 등 모든 페이지에 삽입되는 공통문서 최상부에 정의하며 개별 페이지에 쓰지 않는다.
추가로 제가 사용하는 상수정의 파일입니다.
/common/ 디렉터리에 config.php 문서로 작성하며 문서의 php헤더인 common.php 에 include 하여 사용합니다.
참고용으로 보시고 가져다 쓰셔도 됩니다.
<?php
/*****************************************************************************
+ PHP 상수설정
+ PageName : DcsConfig.php
+ Description : 작성일 2015.05.25
2016.06.23 : line 9 : 개별페이지 접근을 막기 위한 상수등록 – 작업자 xxx
*****************************************************************************/
/*****************************************************************************
+ 개별접근 인식코드
*****************************************************************************/
define(‘_DcsVersion’,’ver 1.0′);
/*****************************************************************************
+ 도메인설정
*****************************************************************************/
define(‘Domain’,’http://’.$_SERVER[SERVER_NAME]);
//보안서버주소 https://www.domain.com:443/test
define(‘HttpsDomain’, ”);
// www. or host 쿠키공유
define(‘CookieDomain’, ‘http://.’.$_SERVER[SERVER_NAME]);
/*****************************************************************************
+ PATH
*****************************************************************************/
define(‘_RootPath’, $_SERVER[DOCUMENT_ROOT].’/’);
define(‘_CommonPath’, _RootPath.’common/’);
define(‘_BoardPath’, _RootPath.’board/’);
define(‘_DataPath’, _RootPath.’data/’);
/*****************************************************************************
+ URL
*****************************************************************************/
define(‘_RootUrl’, Domain.’/’);
define(‘_CommonUrl’, _RootUrl.’common/’);
define(‘_BoardUrl’, _RootUrl.’board/’);
define(‘_DataUrl’, _RootUrl.’data/’);
define(‘_ImageUrl’, _RootUrl.’image/’);
define(‘_JsUrl’, _RootUrl.’js/’);
define(‘_PluginUrl’, _RootUrl.’plugin/’);
define(‘_SkinUrl’, _RootUrl.’skin/’);
/*****************************************************************************
+ _SERVER PATH
*****************************************************************************/
define(‘HttpReferer’, $_SERVER[“HTTP_REFERER”]); // referer
define(‘RemoteAddr’, $_SERVER[“REMOTE_ADDR”]); // 접속자의 ip정보
define(‘HttpUserAgent’, $_SERVER[‘HTTP_USER_AGENT’]); // 접속자 정보
define(‘PhpSelf’, $_SERVER[“PHP_SELF”]); // 현 페이지의 url상 경로
define(‘RequestUri’, $_SERVER[“REQUEST_URI”]); // 파라미터를 포함한 URL경로
define(‘ServerAddr’, $_SERVER[“SERVER_ADDR”]); // 서버IP
define(‘QueryString’, $_SERVER[“QUERY_STRING”]); // 파라미터 변수값
/*****************************************************************************
+ 퍼미션
*****************************************************************************/
define(‘_PermissionDir’, 0755); // 디렉토리 생성시 퍼미션
define(‘_PermissionFile’, 0644); // 파일 생성시 퍼미션
/*****************************************************************************
+ 모바일 디바이스 등록
*****************************************************************************/
define(‘_MobileAgent’, ‘phone|samsung|lgtel|mobile|[^A]skt|nokia|blackberry|android|sony’);
/*****************************************************************************
+ 서치봇 등록
+ 211.249.40. : 네이버 봇으로 판명
+ 211.249.42. : 2017.03.24 – 네이버 봇 IP 추가
*****************************************************************************/
define(‘_BotAgent’, ‘Googlebot|Daumoa|NaverBot|Yeti|msnbot|Yahoo! Slurp|Baiduspider|TMCrawler|AhrefsBot|MJ12bot|YandexBot|360Spider|bingbot|ZumBot’);
define(‘_BotIP’, ‘211.249.40.|211.249.42.’);
/*****************************************************************************
+ 시간상수 : 서버의 시간에 오차가 있을경우 수정
+ 하루 86400초 / 1시간 3600초 : time() + (3600 * 6);
*****************************************************************************/
define(‘_ServerTime’, time());
define(‘_DateTime’, date(‘Y-m-d H:i:s’, _ServerTime));
define(‘_Date’, substr(_DateTime, 0, 10));
define(‘_Time’, substr(_DateTime, 11, 8));
?>
[출처] 《PHP》 define() : 상수의 정의 및 사용법|작성자 CmStar