세이박스

PHP 문자수 자리 고정

웹프로그램

1로 넘어오는 변수를 "001"로 세자리수 맞춤.

$sj_src=sprintf("%03d", $vl_no);


######


To have a string with leading zeros use this:
$string_i = sprintf("%04s",$value)

Gives you an output with leading zeros and 4 digits.
i.e.
0001
0002
...
0010
an so on

PHP 기선언 변수

웹프로그램
기선언 변수
PHP 4.1.0이후부터 외부 변수를 가져오는 가장 선호되는 방법은 아래에서 설명하는 슈퍼전역을 사용하는것이다. 그 이전버전에서는 register_globals이나 긴형태의 기선언 PHP 배열($HTTP_*_VARS)을 사용한다. PHP 5.0.0부터, 긴 형태의 PHP 예약 변수 배열을 register_long_arrays 지시어로 비활성화할 수 있습니다.

서버 변수: $_SERVER
참고: 4.1.0부터 지원됨. 이전 버전은 $HTTP_SERVER_VARS을 사용함

$_SERVER는 헤더, 경로, 스크립트 위치와 같은 정보를 포함하는 배열이다. 이 배열 안의 엔트리는 웹서버에 의해 생성된다. 모든 웹서버가 이런 것들을 제공한다는 보장은 없다. 서버는 어떤것은 빠뜨리거나 여기에서 목록화된 것 외의 것을 제공할수 도 있다. 이런 많은 수의 변수들은 CGI 1.1 specification에 기반하므로, 그런 변수들은 기대할수 있을것이다.

이 변수는 '슈퍼전역', 또는 자동 전역, 변수이다. 즉 스크립트내의 모든 유효영역안에서 사용가능하다는 의미를 갖는다. $HTTP_SERVER_VARS를 사용할때와 같이 함수나 메소드 안에서 사용하기 위해 global $_SERVER;를 할 필요는 없다.

$HTTP_SERVER_VARS는 동일한 초기 정보를 포함하지만, 자동전역은 아니다. ($HTTP_SERVER_VARS 와 $_SERVER는 다른 변수이고 PHP는 그변수들을 따로 다루게 된다는 것에 주의한다)

register_globals 디렉티브가 설정되어있으면, 이 변수들은 스크립트의 전역 유효영역에서 사용이 가능해 진다. 즉 $_SERVER 와 $HTTP_SERVER_VARS 배열과 분리된다. 관련정보는 전역 등록 사용하기라는 이름의 보안 챕터를 참고한다. 이들 각각의 전역은 자동전역이 아니다.

$_SERVER에서는 다음 구성요소를 확인할수도 있고 그렇지 않은수있다. 이 변수중 일부(심지어 모두)는 PHP가 커맨드 라인에서 수행되고 있을때에는 보여지지 않을것이다.



'PHP_SELF'
현재 실행중인 스크립트의 파일명이고, 도규먼트 루트에 상대적인 경로를 갖는다. 예를 들면, 주소 http://example.com/test.php/foo.bar의 스크립트에서 $_SERVER['PHP_SELF']은 /test.php/foo.bar이 될것이다.

PHP가 커맨드 라인 프로세서로 실행중이면, 이 변수는 나타나지 않는다.

'argv'
스크립트로 전달되는 인자의 배열. 스크립트가 커맨드 라인에서 실행중이면, 이 변수는 C-스타일의 커맨드 라인 인자로 제공된다. GET 메소드에 의해 호출될때에는 이 변수는 질의 문자열(query string)을 포함할것이다.

'argc'
스크립트로 전달되는 커맨드 라인 인자의 갯수 (커맨드 라인에서 실행중일때)

'GATEWAY_INTERFACE'
서버가 사용하는 CGI 사양(specification)의 버전: 예를 들면, 'CGI/1.1'.

'SERVER_NAME'
현재 스크립트가 수행되고 있는 서버 호스트의 이름. 스크립트가 가상 호스트에서 수행중이면, 이 변수는 그 가상 호스트를 위해 정의된 값이 될것이다.

'SERVER_SOFTWARE'
서버 식별 문자열. 요구(ruquest)에 응답할때 헤더안에서 보여준다.

'SERVER_PROTOCOL'
페이지가 요청되어진 정보 프로토콜의 이름과 버전: 예를 들면, 'HTTP/1.0';

'REQUEST_METHOD'
페이지에 접근할때 사용된 요청 메소드 종류. 예를 들면,'GET', 'HEAD', 'POST', 'PUT'.

'QUERY_STRING'
페이지가 접근될때의 질의 문자열

'DOCUMENT_ROOT'
현재 스크립트가 수행중인 다큐먼트 루트 디렉토리. 서버 설정 파일에서 정의된다.

'HTTP_ACCEPT'
현재 요청에 대한 Accept: 헤더의 내용.

'HTTP_ACCEPT_CHARSET'
현재 요청에 대한 Accept-Charset: 헤더의 내용. 예를 들면'iso-8859-1,*,utf-8'.

'HTTP_ACCEPT_ENCODING'
현재 요청에 대한 Accept-Encoding: 헤더의 내용. 예를 들면: 'gzip'.

'HTTP_ACCEPT_LANGUAGE'
현재 요청에 대한 Accept-Language: 헤더의 내용. 예를 들면: 'en'.

'HTTP_CONNECTION'
현재 요청에 대한 Connection: 헤더의 내용. 예를 들면: 'Keep-Alive'.

'HTTP_HOST'
현재 요청에 대한 Host: 헤더의 내용.

'HTTP_REFERER'
현재 페이지에 대한 유저 에이전트를 참조하는 페이지의 주소. 모든 에이전트가 이 값을 갖지 않는다. 일부 에이전트는 HTTP_REFERER를 각 특성에 맞게 변경하는 기능을 제공한다. 간단히 말해서, 이 값은 신뢰할수 없다.

'HTTP_USER_AGENT'
현재 요청에 대한 User-Agent: 헤더 내용. 이 값은 페이지에 접근 중인 유저 에이전트를 표시하는 문자열이다. 표준적인 예로는: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). get_browser()로 이 값을 사용하여 유저 에이전트의 능력에 맞게 페이지의 출력을 조절할수 있다.

'REMOTE_ADDR'
현재 페이지를 보고있는 유저의 IP 주소.

'REMOTE_HOST'
현재 페이지를 보고있는 유저의 호스트명. 역방향 dns 검색이 유저의 REMOTE_ADDR를 위해 사용된다.

참고: 웹서버는 이 변수를 생성할수 있도록 설정되어야 한다. 예를 들면 아파치에서는 httpd.conf안에서 HostnameLookups On 이 필요할것이다. gethostbyaddr()도 참고.

'REMOTE_PORT'
웹서버와 통신중인 유저 머신이 사용중인 포트.

'SCRIPT-x_FILENAME'
현재 수행되는 스크립트의 절대 경로명.

참고: file.php, ../file.php처럼 스크립트를 상대 경로로 지정하여 CLI로 실행할 경우, $_SERVER['SCRIPT-x_FILENAME']은 사용자가 지정한 상대 경로를 포함합니다.


'SERVER_ADMIN'
웹서버 설정 파일안의 SERVER_ADMIN (아파치용) 디렉티브에 주어지는 값. 스크립트가 가상 호스트에서 수행중이면, 이 값은 그 가상호스트를 위해 정의되는 값이 될것이다.

'SERVER_PORT'
웹서버가 통신을 위해 사용중인 서버 머신의 포트. 초기 설정값으로 '80';이 될것이다. 예를 들어, SSL을 사용중이면, 안전한 HTTP 포트로 정의된 어떤 값으로도 변경할수 있다.

'SERVER_SIGNATURE'
활설화되어있다면, 서버가 생성하는 페이지에 추가되는 서버 버전과 가상 호스트명을 갖는 문자열.

'PATH_TRANSLATED'
현재 스크립트에 대한 파일시스템(다큐먼트 루트가 아님) 기반의 경로 서버가 virtual-to-real 매핑으로 설정되면 보인다.

'SCRIPT-x_NAME'
현재 스크립트의 경로를 갖는다. 이 값은 가리킬 필요가 있는 페이지에 유용하다.

'REQUEST_URI'
이 페이지에 접근하기 위해 주어지는 URI; 예를 들면,'/index.html'.

'PHP_AUTH_USER'
HTTP 인증을 사용하는 모듈로서 아파치에서 수행될때, 이 변수는 유저에 의해 제공되는 username으로 설정된다.

'PHP_AUTH_PW'
HTTP 인증을 사용하는 모듈로서 아파치에서 수행될때, 이 변수는 유저가 제공하는 password로 설정된다.

'AUTH_TYPE'
HTTP 인증을 사용하는 모듈로서 아파치에서 수행될때, 이 변수는 인증 타입으로 설정된다

PHP register_globals=Off 상태에서의 POST,GET 변수제어

웹프로그램
제목: register_globals=Off 상태에서의 POST,GET 변수제어
분류: php
글쓴이: 김정균 <admin@oops.org>

호스팅 서버 같은 곳에서 보안상의 이유로 register_globals
를 OFF 로 변경 하거나 또는 보안상 register_globals 를 OFF
로 변경하고 싶은데 기존의 소스들 때문에 망설이시는 분들께
유용한 함수가 될것 같네요.

JSBoard 를 개발하다가 보안때문에 register_globals 를 OFF
로 두었을때 작동을 하지 않는다는 문의가 많이 들어와 만든
함수입니다..

* PHP 4.1 이상 버젼용

function parse_query_str() {
foreach($_GET as $key => $value) {
global ${$key};
${$key} = $value;
}

foreach($_POST as $key => $value) {
global ${$key};
${$key} = $value;
}
}

* PHP 4.0 이하 버젼용

function parse_query_str() {
foreach($HTTP_GET_VARS as $key => $value) {
global ${$key};
${$key} = $value;
}

foreach($HTTP_POST_VARS as $key => $value) {
global ${$key};
${$key} = $value;
}
}

테스트 환경은 다음과 같이 하시면 이해가 쉬울 것 같습니다.
일단 php.ini 에서 register_globals = Off 로 설정을 한뒤에
아파치를 재시작 합니다. 다음 간단하게 웹루트에 test_query.php
라는 스크립트를 하나 만듭니다.

--------- cut here test_query.php -----------
<?
function parse_query_str() {
foreach($_POST as $key => $value) {
global ${$key};
${$key} = $value;
}

foreach($_GET as $key => $value) {
global ${$key};
${$key} = $value;
}
}
parse_query_str();
echo "$a<br>\n$b<br>\n$c<br>\n";
?>
--------- cut here test_query.php -----------

다음 http://domain.com/test_query.php 를 웹브라우져로 호 출을 합니다. 결과는 소스의 arse_query_str() 함수를 호출 을 할 때와 안할 때의 차이를 보시면 알겁니다.

위와 같이 이용을 하면 register_globals 의 값을 On 으로 두던 Off 로 두던 보안을 강화하면서 register_globals 의 값에 상관없이 register_globals 의 값이 On 일때 처럼 코 딩을 할 수 있게 됩니다.

이 함수가 보안을 위하여 register_globals 의 값을 Off 로 두는것에 어떠한 작용을 하게 될지에 대해서는 검증이 되지 는 않았습니다만 일단 넘어오는 값을 GET 이면 GET 으로 넘 어온 값을 조절하고 POST 이면 POST 의 값을 조절하기 때문 에 크게 위배되지는 않을것 같습니다.

원래는 GET 과 POST 로 넘어오는 값을 하나의 배열로 return 하는 방법이 더 낳을것 같지만 그렇게 되면 기존의 소스를 너무 수정을 해야 하기 때문에 위와 같은 식으로 전역 변수화 처리를 한 것입니다. ^^;
---------------------------------------------------------------------------
http://kltp.kldp.org/

PHP register_global=Off 상태 라도 변수 먹히게

웹프로그램
PHP 소스 상단에 다음과 같이 선언해주면 php.ini에 register_global = OFF 상태여도 POST전송시 변수값이 전송 됩니다.
웹소스를 코딩시 서버 설정을 손대지 못할 경우 유용하게 사용하실 수 있을겁니다.

@error_reporting(E_ALL ^ E_NOTICE);
@extract($HTTP_GET_VARS);
@extract($HTTP_POST_VARS);
@extract($HTTP_SERVER_VARS);
@extract($HTTP_ENV_VARS);
@extract($HTTP_SESSION_VARS);
@extract($_FILES);

asp에서 변수 안에 있는 문자열을 검사해서 특정 문자가 있는지 검사

웹프로그램
sql에서는 like로 문자열 검색을 하는데..
변수에 있는 특정문자가 있는지 확인 하는 함수가 있는지...
test="1,2,3,4,5,6,7"
aa=(test에 2가 있으면 aa에 2값 저장)
 
Dim test, aa
test = "1,2,3,4,5,6,7"
 
IF instr(test,"2") Then
   aa = "2"
Else
   aa = ""
End IF
 
즉, instr 함수 사용하면됨.