php에서 지원하는 암호와 방법은 crypt, md5를 이용하는 것인데
이들은 모두 문자열을 암호화하여 리턴하는 함수이며
암호화된 것을 해독하는 역함수가 존재하지 않는 단방향 암호화함수이다.
그러므로 암호화를 한 다음에는 아무도 원래의 내용이 무엇인지 알 수 없다.

md5 ( message digest algorithm 5 )
-RSA 암호 개발자가 개발한 메시지 다이제스트 함수 알고리즘으로 주로 데이터의 오류 검출에 이용

Hash
-특정한 데이터를 고정 길이의 유일한 값으로 대응되도록 하는것



crypt함수
-유닉스계열에서 기본적으로 지원하는 암호화 방식으로
입력받은 키 값에 의존하여 암호화한 후 저장될 변수에 저장
여기서 키 값이란 암호화를 하는데 있어서 의존하는 값으로, 키 값에 따라 암호화된 결과는 다르게 나타나며, 키 값은 두개의 문자로 이루어져야 한다.
저장될 변수 = crypt (문자열, 키값);

<?
$a="abcde";
echo crypt($a, "1a");
?>
결과는 1a8AAA/amoVDA
->결과는 13자리로 동일하다

<?
$a="abcde";
echo crypt($a, "2z");
?>
결과는 2z6wBLPW0IjT6
->암호화된 결과물의 맨 앞 두자리는 키값이 들어가게 됨

키 값에 한자리만 넣게 되면
나머지 한자리에는 $로 채우게 된다
->예> 키 값을 2로 넣으면 그 값은 2$ 로 주었을때와 동일하다.

키 값을 넣지 않으면 임의의 키 값을 실행하며 , 그 결과는 계속 다르게 나타난다.



md5
-실제로 암호화라기 보다는 단순히 어떠한 내용의 hash값을 계산해주는 것으로
crypt와 마찬가지로 해독방법이 존재하지 않는 단방향암호화 함수이다.

저장될 변수 = md5 (문자열);

<?
$a="abcde";
echo md5($a);
?>
결과는 ab56b4d92b40713acc5af89985d4b786
->결과는 32자리


<?
$a="abcdefgh";
$b="abcdefghi";

echo crypt ($a, 12). "<br>";
echo crypt($b,12)."<br>";
echo md5($a). "<br>";
echo md5($b). "<br>";
?>
결과는
12cmzKaxhUaiY
12cmzKaxhUaiY
e8dc4081b13434b45189a720b77b6818
8aa99b1f439ff71293e95357bac6fd94

->변수a는 8자, 변수b는 9자 이다
변환할 결과를 보면
크립트는 8개의 문자열만 취하고 나머지는 잘라 버린 후에 암호화한다는 것을 알 수 있다.
반면 md5는 8자 이상의 문자열을 지원한다.


<?
$a[0]="안녕";
$a[1]="어서";
$a[2]="반갑";

//백만분의 1초로 난수발생
////마이크로타임에 백마을 곱해 정수로 만들어 줌
mt_srand ( (double)microtime()*1000000 );

$result = mt_rand (0,2);
echo "$result <br>";
echo $a[$result];
?>
결과는
1
어서

배열a에 문자열대신
<img src='이미지'>와 같이 사용하면 랜덤이미지를 구현할 수 있다

rand - 정해진 범위에서 하나의 수를 결정하여 리턴
srand - 난수 발생 간격을 결정
getrandmax - 발생할 수 있는 난수의 최대 범위를 리턴

<?
echo getrandmax();
?>
결과는32767
->즉 0~32767의 수중 하나를 뽑을 수 있다는 말이다.

저장될 변수 = rand (최소값, 최대값);

랜드함수는 srand함수와 함께 사용되야 그 기능을 제대로 발휘할 수가 있다.

<?
//백만분의 1초로 난수발생
////마이크로타임에 백마을 곱해 정수로 만들어 줌
srand ( (double)microtime()*1000000 );

$result = rand (0,100);
echo $result;
?>


mt_rand, mt_srand, mt_getrandmax
- 함수들 앞에 mt 라는 문자를 붙여놓은 함수는
Mersenne Twister알고리즘을 이용하여 난수를 발생시키는 함수로
rand함수보다 속도가 네배정도 빠르고 더 큰 범위의 난수를 만들어 주며
사용형식은 랜드함수와 동일하다.

<?
echo mt_getrandmax();
?>
결과는
2147483647
->2147483647개의 수중에서 하나의 수를 뽑을 수 있다는 말이다.

<?
//백만분의 1초로 난수발생
////마이크로타임에 백마을 곱해 정수로 만들어 줌
mt_srand ( (double)microtime()*1000000 );

$result = mt_rand (0,100);
echo $result;
?>























특정일로부터의날짜
<?
/////////////////////////현재의 시간정보를 구함
$now = time();//유닉스 타임 스탬프
$hour = date('H'); //현재의 시간
$min = date ('i');
$sec= date ('s');

//////////////////////////기념일의 유닉스타임스탬프를 구함
$day = mktime($hour, $min, $sec, 11,1,1983);

///////////////////////////유닉스 타임스탬프의 차를 구함
$result = $now - $day;

//////////////////////////결과를 날짜로 환산 후 출력
///////////////////유닉스타임은 초단위이기에 86400 (=24시간*60분*60초) 으로 나눠줘야
///////////날짜단위가 된다
$result = $result / 86400;
echo "기념일로 부터 $result 날이 지났습니다.";

?>


특정일까지의 날짜
<?
/////////////////////////현재의 시간정보를 구함
$now = time();//유닉스 타임 스탬프
$hour = date('H'); //현재의 시간
$min = date ('i');
$sec= date ('s');

//////////////////////////기념일의 유닉스타임스탬프를 구함
$day = mktime($hour, $min, $sec, 11,1,1983);

///////////////////////////유닉스 타임스탬프의 차를 구함
$result = $now - $day;

//////////////////////////결과를 날짜로 환산 후 출력
///////////////////유닉스타임은 초단위이기에 86400 (=24시간*60분*60초) 으로 나눠줘야
///////////날짜단위가 된다
$result = abs($result / 86400);
echo "기념일까지 $result 날이 남았습니다.";

?>

microtime
-백만분의 1초까지 측정한 시간 값을 알려주는 함수로
결과값은 공백을 사이로 두고 "소수점이하의 초" "자연수 형태의 초" 의 형식을 가지며
자연수 형태의 초는 유닉스 타임스탬프값이 된다.
저장할 변수 = microtime ();

<?
$time = microtime();
echo $time;
?>
결과는
0.34375200 1231772417
->백만분의 1초까지 측정한 결과 0.34375200 초가 측정되었고,
현재 유닉스 타임스탬프값은1231772417 라는 뜻이다.


위 두개의 값을 각각의 변수에 저장하려면?
<?
$time = explode (" ", microtime() );//공백을 기준으로 마이크로타임변수를 나눔

echo "
microtime : $time[0] <br>
time : $time[1]";
?>
결과는
microtime : 0.42187700
time : 1231772622

[참고]더 간단하게 구하는 방법
<?
echo (double)microtime();
?>



mktime
- 현재의 시간을 기준으로 유닉스타임스탬프를 구하는 것이 아니라,
주어진 시간을 기준으로 유닉스타임스탬프를 구하는 함수
저장할변수 = mktime (시간, 분, 초, 달, 날짜, 년도);

<?
$time = mktime (9,10,15, 11,1, 1977);
echo $time;
?>
결과는
247191015

<?
$time = date (' Y m d H i s', 247191015);
echo $time;
?>
결과는
1977 11 01 09 10 15


checkdate
-지정된 날짜가 실제 존재하는지 확인하고 그 결과를 빈값(false) 또는 1(True)로 리턴해준다
저장될 변수 = checkdate(달, 날짜, 년도);

<?
echo checkdate(2,29,2002);
?>
결과는 없음

<?
echo checkdate(2,28,2002);
?>
결과는 1
->존재하는 날짜임을 증명
















date(시간형식);
주의! 대소문자구분함

<년도관련>
L-윤년인지의 여부표시 예> 0 또는 1
Y-년도를 4자로 표시 예> 2009
y-년도를 2자로 표시 예>09


<달 관련>
F - 달을 영문으로 표시 예>January
m - 달을 숫자로 표시 예>01,02,03....12
M - 달을 3글자로 표시 예>Jan
n - 달을 0없이 표시 예>1,2,3...12
t - 몇일까지 있는 달인지를 표시 예>28,30,31


<날짜관련>
d - 날짜를 두 자리로 표시 예> 01,02,03...31
j - 날짜를 0없이 표시 예>1,20....31
S - 순서를 나타내는 2글자의 접미사로 표시 예>st, th, rd
z - 해당년도의 몇번째 날일지를 표시 예> 0~365



<요일관련>
D - 요일을 세글자로 표시 예>Fri
l(소문자L) - 요일을 표시 예>Friday
w - 요일을 숫자로 표시 예> 0(일), 1(월)...6(토)



<시간관련>
h - 시간을 12시간 단위로 표시 예>01,02 ....12
H - 24시간 단위로 표시 예>00,01....23
g - 12시간 단위로 0없이 표시 예>1,2,...12
G - 24시간 단위로 0없이 표시 예>0,1,2,...23
y - 년도를 2자로 표시 예>09


<분관련>
i - 분을표시 예>00,01 ....59


<초관련>
s - 초를 표시 예>00,01 ....59



<기타>
r - 몇가지 정보를 종합하여 표시 예> Fri, 5 Apr 2002 21:54:51 +0900
U - 기준시점(GMT 1970년 1월 1일 00:00:00)으로부터 지난 시간을 초로 표시
Z - 지역간의 시간 편차를 초 단위로 표시 예> -43200~43200

<?
$time = date('Y년도 m월 d일 H시 i분 s초'  );
echo $time;
?>
결과는
2009년도 01월 12일 23시 43분 47초


date(시간형식, 유닉스타임스탬프);

<?
$time = date('Y년도 m월 d일 H시 i분 s초',0 );
echo $time;
?>
결과는
1970년도 01월 01일 09시 00분 00초
->유닉스타임스탬프는 1970.1.1 9시부터 몇시간이 지났는지 알려주는 값이다
(유닉스타임스탬프는 시간을 다룰때 기본적으로 사용되는 중요한 값,
몇자리숫자 하나로, 그 순간의 년도, 월, 날짜, 시간,분,초 등 모든 정보를 알 수 있기 때문)

<?
$time = date('Y년도 m월 d일 H시 i분 s초',1018002274 );
echo $time;
?>
결과는 2002년도 04월 05일 19시 24분 34초





time함수
-유닉스타임스탬프를 구하기 위해 주로 사용하는 함수
저장할변수 = time ();

<?
$time = time(); //현재의 유닉스 타임스탬프를 구한후 변수에 저장하고 출력하는 예제
echo $time;
?>
결과는 1231771933















반올림
지정될변수 = round(소수, 자릿수);

<?
$b=round(1.55,1);
echo "$b";
?>
결과는 1.6

<?
$b=round(1.55);
echo "$b";
?>
결과는 2
->자릿수를 적지 않으면 , 소수 0째자리 즉 정수의 형태로 반올림한다



올림
지정될변수= ceil(소수);

버림
지정될변수= floor(소수);


거듭제곱
저장될변수 = pow (진수, 지수);

<?
$b=pow(3,2);//3의 2제곱
echo "$b";
?>
결과는 9


제곱근 square root
저장될 변수 = sqrt (제곱근값);

<?
$b=sqrt(2);
echo "$b";
?>
결과는 1.41421356237


삼각함수
저장될변수 = sin(값);
저장될변수 = cos(값);
저장될변수 = tan(값);
저장될변수 = asin(값);
저장될변수 = acos(값);
저장될변수 = atan(값);

<?
$a= sin(0);
$b=cos(0);
$c=tan(0);

echo "
sin0= $a <br>
cos0= $b <br>
tan0= $c";

?>
결과는
sin0= 0
cos0= 1
tan0= 0


최대값 max
max(값1, 값2, 값3......);
max(배열);
//배열의 원소중 가장 큰 원소 찾을때

<?
$a= array(1,2,3,4,5);
echo max($a);

?>
결과는 5

최소값 min
min(값1, 값2, 값3......);
min(배열);
//배열의 원소중 가장 작은 원소 찾을때



진법변환 base_convert
저장될 변수 = base_convert (변환할 값, 값의 진법, 변환할진법);

<?
$a= base_convert (9,10,2); //10진수 9를 2진법으로 변환
echo $a;

?>
결과는 1001




절대값 abs
저장될변수 = abs(값);

<?
echo abs(-10);
?>
결과는 10




두수의 차 ^

<?
echo 1^3 //1과 3의 차
?>
결과는 2
->즉 abs(1-3) 과 같다고 보면된다.




숫자의 형태변환 number_format
저장될변수 = number_format (숫자, 소수점자리, 솟점에 사용할 문자, 콤마대신 사용할문자);

<?
echo number_format(1000000);
?>
결과는 1,000,000
->아무옵션도 안넣고 숫자를 넣으면 3자리마다 콤마로 표시해줌을 알 수 있다.

예제
콤마대신에 *넣고
소수점대신에 $넣고
그 뒤에 소수점둘째자리까지 표현하기

<?
echo number_format(1000000,2,"$", "*");
?>
결과는 1*000*000$00








문자열을 배열로 만들기explode
-변수에 저장된 문자열을 임의의 구분자를 사용하여 배열로 만들어 주는 함수
저장될 배열 = explode (구분자, 문자열);

예를들어 공백을 구분자로 하여 배열을 만들면
$a="문자열을 배열로 만들기";
$b= explode( " ", $a);

이렇게 하게되면
$b[0]=문자열을
$b[1]=배열로
$b[2]=만들기
가 된다


<?
$a="문자열을/배열로/만들기";
$b= explode( "/", $a);

echo "$b[0] $b[1] $b[2] $b[3] $b[4] $b[5]";
?>
결과는
문자열을 배열로 만들기

배열을 문자열로 만들기implode
저장될변수 = implode (구분자, 배열명);

<?
$a[0]="배열을";
$a[1]="문자열로";
$a[2]="만들기";

$b=implode(" ", $a);

echo "$b";
?>
결과는
배열을 문자열로 만들기






























배열합치기
-두 개 이상의 배열을 하나의 배열로 합칠때
저장될 배열 = array_merge(배열1, 배열2, ...);

<?
$a[0]="a";
$a[1]="b";
$a[2]="c";
$a[3]="d";

$b[0]="aa";
$b[1]="bbb";

$c=array_merge($a,$b);

echo "$c[0] $c[1] $c[2] $c[3] $c[4] $c[5]";
?>
결과는
a b c d aa bbb



연관배열의 모든키이름추출
저장될배열 = array_keys (연관배열);

<?
$a[cpu]="pen4";
$a[ram]="256m";
$a[hdd]="2g";


$c=array_keys($a);

echo "$c[0] $c[1] $c[2] $c[3] $c[4] $c[5]";
?>
결과는 cpu ram hdd


연관배열의 모든값추출
저장될배열 = array_values (연관배열);

<?
$a[cpu]="pen4";
$a[ram]="256m";
$a[hdd]="2g";


$c=array_values($a);

echo "$c[0] $c[1] $c[2] $c[3] $c[4] $c[5]";
?>
결과는 pen4 256m 2g














배열의 첫원소 삭제->array_shit (배열이름);
배열의 끝원소 삭제->array_pop (배열이름);


<?
$a[0]="a";
$a[1]="b";
$a[2]="c";

array_shift($a);
echo "$a[0] $a[1]";
?>
결과는 b c

<?
$a[0]="a";
$a[1]="b";
$a[2]="c";

array_pop($a);
echo "$a[0] $a[1] $a[2] $a[3]";
?>
결과는 a b

배열의 원소추출
-배열의 일부분을 추출하여 새로운 부분 배열을 만들어 주는 함수
새배열 = array_slice (배열, 시작위치, 길이);
길이를 생략하면 시작위치부터 끝까지 모두 가져오게 된다


 원소  $a[0] $a[1]  $a[2]  $a[3] 
 값 a b c d
 시작위치 +  0  1  2  3
 시작위치 -  -4  -3  -2  -1


<?
$a[0]="a";
$a[1]="b";
$a[2]="c";
$a[3]="d";

$b=array_slice($a, 1,2);

echo "$b[0] $b[1] ";
?>
결과는 b c

원소치환
배열의 일부분을 다른 내용으로 치환
array_splice (배열, 시작위치, 길이, 치환할내용);

<?
$a[0]="a";
$a[1]="b";
$a[2]="c";
$a[3]="d";

array_splice($a, 1,1, "x");

echo "$a[0] $a[1] $a[2] $a[3]";
?>
결과는 a x c d

array_splice($a, 1,2, "x");
길이가 2가 되면 두개의 원소가 하나로 합쳐지고 , 뒤의 원소들이 한 칸씩 당겨진다.

array_splice($a, 1,2, );
치환할 내용을 생략하면 ,배열의 원소 자체가 삭제된다.









+ Recent posts