Skip to main content

PHP v1.0 </doc>

webstoryboy.co.kr

PHP는 서버측에서 실행되는 스크립트 언어입니다.

PHP 서버사이드 스크립트 언어입니다. 자바스크립트는 웹 브라우저에서 내장된 인터프리터에 의해 해석되는 언어입니다. 즉 웹브라우저에서 이용할 수 있는 프로그램입니다. 반면에 PHP는 서버에 설치된 PHP에 의해 해석됩니다. 이러한 처리를 가능하게 해주는 프로그램은 php, jsp, asp등이 있으며, 워드프레스, 줌라, XE 카페24, 티스토리 등의 플랫폼 역시 PHP을 기반으로 하고 있습니다.

PHP 출력

<?php
     //실행코드
?>

PHP 주석

//한줄
/* 여러줄 */

PHP 기초 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		echo "hello php";
	?>
</body>
</html>

변수는 여러가지 값으로 변할 수 있는 수를 의미합니다.

$변수명 = 값;

PHP 기초 View
<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>php</title>

	<script>
		//변수명에 javascript를 저장하고 출력하세요!
		var x = "javascript";

		document.write(x);
		document.write("<br>");
		document.write("나는 " + x + "를 배우고 있습니다.");
		document.write("<br><br>");
	</script>
</head>
<body>
	<?php
		$php = "php";

		echo $php;
		echo "<br>";
		echo "나는 " .$php. "를 배우고 있습니다.";
		echo "<br>";
		echo "나는 {$php}를 배우고 있습니다.";
		echo "<br>";
		echo "나는 \"php\"를 배우고 있습니다.";
		echo "<br>";
		echo "나는 \$15를 사용했습니다.";
	?>
</body>
</html>

배열은 여러개의 값을 변수에 저장 할 수 있습니다.

$변수명 = array();

배열 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script>
		var korea = new Array();

		korea[0] = "seoul";
		korea[1] = "busan";

		document.write(korea[0]);
		document.write("<br>");
		document.write(korea[1]);
		document.write("<br><br>");
	</script>
</head>
<body>
	<?php
		$korea = array();

		$korea[0] = "seoul";
		$korea[1] = "busan";

		echo $korea[0];
		echo "<br>";
		echo $korea[1];
		echo "<br>";

		$korea['city'] = 'gangnam';
		echo $korea['city'];
	?>
</body>
</html>

array_push()

array_push(변수명, 배열에 들어갈 값, 배열에 들어갈 값,....)

array_push() View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>array_push</title>
</head>
<body>
	<?php
		$fruit = array();

		array_push($fruit, 'apple', 'banana', 'grape', 'coconut', 'melon');

		echo $fruit[0]."<br>";
		echo $fruit[1]."<br>";
		echo $fruit[2]."<br>";
		echo $fruit[3]."<br>";
		echo $fruit[4]."<br>";
	?>
</body>
</html>

2차 배열

$변수명[인덱스1][인덱스2] = 값;s

2차 배열 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$earth = array();

		$earth['nation'][0] = 'korea';
		$earth['nation'][1] = 'america';
		$earth['nation'][2] = 'canada';
		$earth['nation'][3] = 'japan';
		$earth['nation'][4] = 'china';
		$earth['nation'][5] = 'france';

		//배열의 내용을 보여줍니다.
		var_dump($earth);

		echo "<br><br>";
		echo $earth['nation'][4];
	?>
</body>
</html>

산술연산자

연산자 예시 설명
+ $x + $y 더하기
- $x - $y 뻴셈
* $x * $y 곱하기
/ $x / $y 나누기
% $x % $y 나머지

증감연산자

연산자 설명 표현
++ ++ $x / $x ++ 선 증가 연산자 / 후 증가 연산자
-- -- $x / $x -- 선 감소 연산자 / 후 감소 연산자

비교연산자

연산자 예시 설명
== $x == $y 좌변과 우변이 값이 같을 경우 true
=== $x === $y 좌변과 우변이 값이 같거나 데이터형도 같을 경우 true
!= $x != $y 좌변과 우변의 값이 같지 않을 경우 true
!== $x !== $y 좌변과 우변의 값이 같지 않을 경우, 또는 데이터형이 다른 경우 true
> $x > $y 좌변이 우변보다 클 경우 ture
< $x < $y 좌변이 우변보다 작을 경우 true
>= $x >= $y 좌변이 우변보다 크거나 같을 경우 ture
<= $x <= $y 좌변이 우변보다 작거나 같을 경우 true

논리연산자

연산자 예시 설명
&& $X && $Y (AND)둘다 true인 경우 true
|| $X || $Y (OR)둘 중의 하나 이상이 true이면 true
! !$X (NOT)식이 false인 경우 true

변수에 사용되는 값이 숫자인지, 문자열인지, 논리값인지를 구분하는 것을 데이터 형이라고 합니다.

데이터형
int or interger 숫자 - 정수
double 숫자 - 소수
string 문자열
boolen 논리값(true, false)
Null 없는 값
array 배열
데이터형 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>데이터 형</title>
</head>
<body>
	<?php
		$num = 12;
		echo "변수 \$num 데이터형(값: {$num})은 " .gettype($num). "입니다.<br>";

		$greeting = "안녕";
		echo "변수 \$greeting 데이터형(값: {$greeting})은 " .gettype($greeting). "입니다.<br>";

		$numStr = "121212";
		echo "변수 \$numStr 데이터형(값: {$numStr})은 " .gettype($numStr). "입니다.<br>";

		$fruit = array();
		echo "변수 \$fruit 데이터형(값: {$fruit})은 " .gettype($fruit). "입니다.<br>";

		$nu = null;
		echo "변수 \$nu 데이터형(값: {$nu})은 " .gettype($nu). "입니다.<br>";

		$bloolean = true;
		echo "변수 \$bloolean 데이터형(값: {$bloolean})은 " .gettype($bloolean). "입니다.<br>";
	?>
</body>
</html>
데이터형 변경하기 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$str = "문자열";
		echo "데이터형 변경 전의 데이터형 ".gettype($str)." 값은 : {$str} <br>";

		$str = (int) $str;
		echo "데이터형 변경 후의 데이터형 ".gettype($str)." 값은 : {$str} <br>";
		echo "<br><br>";

		$str2 = "555문자열";
		echo "데이터형 변경 전의 데이터형 ".gettype($str2)." 값은 : {$str2} <br>";

		$str2 = (int) $str2;
		echo "데이터형 변경 후의 데이터형 ".gettype($str2)." 값은 : {$str2} <br>";
		echo "<br><br>";

		$str3 = "12.23454";
		echo "데이터형 변경 전의 데이터형 ".gettype($str3)." 값은 : {$str3} <br>";

		$str3 = (int) $str3;
		echo "데이터형 변경 후의 데이터형 ".gettype($str3)." 값은 : {$str3} <br>";
	?>
</body>
</html>
if문 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		//변수의 값이 짝수인지 홀수인지 판단하는 조건문을 완성하세요!
		$num = 100;
		if( $num % 2 == 0){
			echo "짝수입니다. <br><br>";
		} else {
			echo "홀수입니다.";
		}

		$data = "문자";
		if( gettype($data) == 'string'){
			echo "데이터형은 문자열입니다.";
		} else if ( gettype($data) == 'integer' ){
			echo "데이터형은 정수형입니다.";
		} else {
			echo "데이터형은 문자열도 정수형도 아닙니다.";
		}
	?>
</body>
</html>
for문 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<select name="birthMonth" id="birthMonth">
		<?php
			//4월에 기본 선택되도록 변수 선언
			$selectMonth = 4;

			for($i=1; $i<=12; $i++){ 
				$selected = '';

				if($i == $selectMonth){
					$selected = "selected";
				}

				?>
				<option value="<?=$i?>" <?=$selected?>><?=$i?></option>
			<?php } ?>
	</select>
	<label for="birthMonth">월</label>
</body>
</html>

foreach문

foreach(대상변수 as 변수의 대체 이름){ //코드 입력 }

foreach문 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$member = array();
        
        //member 배열에 0 인덱스를 생성하고 0 인덱스도 배열로 선언
		$member[0] = array();

		$member[0]['name'] = '박종성';
		$member[0]['useID'] = 'eedd';
		$member[0]['email'] = 'eedd@naver.com';

		$member[1] = array();

		$member[1]['name'] = '김지호';
		$member[1]['useID'] = 'aadd';
		$member[1]['email'] = 'aadd@naver.com';

		$member[2] = array();

		$member[2]['name'] = '김동현';
		$member[2]['useID'] = 'love';
		$member[2]['email'] = 'love@naver.com';

		// for($i=0; $i<count($member); $i++){
		// 	echo $member[$i]['name']."<br>";
		// }

		foreach($member as $data) {
			echo $data['name']."<br>";
		}
	?>
</body>
</html>

function 함수명(){
     //실행 함수
}
함수명(); //함수 호출

function 함수명(파라미터){
     //실행 함수
}
함수명(아규먼트); //함수 호출

시간 함수는 리눅스 시간을 출력해주는 함수입니다. 여기서 리눅스 시간이란? 1970년 1월 1일 00시 00분 00초부터 세기 시작하는 시간입니다. 시간 함수는 1970년 1월 1일 00시 00분 00초부터 몇 초가 지났는지를 반환합니다. 이 리눅스 시간을 "타임스탬프"라고 합니다.

종류 설명
checkdate 주어진 날짜가 실제 존재하는 날짜인지 판단합니다.
date 날짜와 시간을 지정한 형식에 맞추어 반환합니다.
getdate 날짜와 시간을 배열로 반환합니다.
microtime 유닉스 형식의 시간으로 반환합니다.
mktime 주어진 시간을 유닉스 형식의 시간으로 반환합니다.
time 현재의 시간을 유닉스 형식의 시간으로 반환합니다.
date 함수
인자 자료형 설명
format string 시간과 날짜의 반환 형식을 지정합니다.
timestamp int 특정 시간을 지정합니다.
date 함수에서 사용되는 형식 문자
분류 문자 설명
d 일자를 두 자리로 반환합니다. 01~31
D 요일을 3글자로 반환합니다. Mon~Sun
j 일자를 0이 붙지 않는 형식으로 반환합니다. 1~31
I 요일을 영문 단어로 반환합니다. Sunday~Saturday
S 영문 서수 접미사를 반환합니다. st, nd, rd, th
w 요일을 순자로 반환합니다. 0(일)~6(토)
Z 해당 연도의 몇 번째 날인지 반환합니다. 0~364
W 해당 연도의 몇 번째 주인지 반환합니다. 12(연도의 12번째 주)
F 월을 영문 단어로 반환합니다. January~December
m 월을 두자리 숫자로 반환합니다. 01~12
M 월을 영문 3글자로 반환합니다. Jan~Dec
n 월을 0이 붙지 않는 숫자로 반환합니다. 1~12
t 해당 월의 날짜 수를 반환합니다. 28~31
년도 L 윤년인지 여부를 반환합니다. 윤년이면1, 아니면0
Y 연도를 4자리 수로 반환합니다. 2018
y 연도를 2자리 수로 반환합니다. 18
년도 a 오전과 오후를 영문 소문자로 반환합니다. am, pm
A 오전과 오후를 영문 대문자로 반환합니다. AM, PM
g 시간을 12시간 형식으로 반환하며, 0이 붙지 않습니다. 1~12
G 시간을 24시간 형식으로 반환하며, 0이 붙지 않습니다. 0~24
h 시간을 12시간 두 자리 형식으로 반환합니다. 01~12
H 시간을 24시간 두 자리 형식으로 반환합니다. 00~23
i 분을 두자리 형식으로 반환합니다. 00~59
s 초를 두자리 형식으로 반환합니다. 00~59
날짜/시간 c ISO 8601 형식의 날짜로 반환합니다. 2017-01-01T12:00:00+09:00
r RFC 2822 형식의 날짜로 반환합니다. Sun, 09, Jan 2019 12:00:00+09:00
U 유닉스 형식 시간을 반환합니다. 1136041200

time()

time() View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		ini_set('date.timezone','Asia/Seoul');
		echo '1970년 1월 1일 0시 0분 0초로부터 '.time().'초가 지났습니다.';
		echo '<br>';
		echo "현재 시간은 ".date("Y년 m월 d일 H시 i분 s초", time());
	?>
</body>
</html>

mktime()

mktime(시, 분, 초, 월, 일, 년);

time() View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		ini_set('date.timezone','Asia/Seoul');
		// echo "2019년 4월 4일 10시 25분 10초의 타임스탬프는? <br>";
		// echo mktime(20, 25, 10, 4, 4, 2019);

		//시작 시간 설정
		$startTime = mktime(10, 25, 10, 4, 4, 2019);

		//종료 시간 설정
		$endTime = mktime(10, 33, 10, 4, 4, 2019);

		if( $startTime <= time() && $endTime > time() ){
			echo "이벤트를 참여하세요";
		} else {
			echo "이벤트 시작 전이거나 종료되었습니다.";
		}
	?>	
</body>
</html>
함수 기능
basename 경로에서 파일 이름만을 반환합니다.
chmod 파일의 모드를 변겨합니다.
copy 파일을 복사합니다.
dirnmae 경로에서 디렉토리 이름만 반환합니다.
dirnmae 경로에서 디렉토리 이름만 반환합니다.
fclose 열려 있는 파일 포인터를 종료합니다.
feof 파일 포인터가 파일의 끝에 있는지 검사합니다.
fgetc 파일로부터 하나의 문자를 가져옵니다.
fgets 파일로부터 한줄의 문자를 가져옵니다.
file_exists 파일이 존재하는지 여부를 확인합니다.
file 파일 전체를 배열로 읽어들입니다.
filesize 파일의 크기를 반환합니다.
filetype 파일의 형식을 반환합니다.
fopen 파일의 URL을 엽니다.
fpassthru 파일 포인터로부터 파일의 끝까지의 모든 데이터를 출력합니다.
fputs, fwrite 파일 포인터에 지정한 크기의 문자열을 씁니다.
함수 기능
crypt 단방향으로 문자열을 암호합니다.
echo 문자열을 출력합니다.
explode 문자열을 특정 문자열을 기준으로 분리합니다.
htmlentities 해당하는 모든 문자를 HTML 엔티티로 변환합니다.
implode/join 배열의 원소를 문자열로 연결합니다.
ltrim 문자열 왼쪽의 공백을 제거합니다.
md5 문자열의 MD5 해시값을 반환합니다.
nl2br 문자열의 모든 줄 바꿈 앞에 <br/>태그를 삽입합니다.
print 문자열을 출력합니다.
printf 형식화된 문자열을 출력합니다.
rtrim/chop 문자열 오른쪽의 공백을 제거합니다.
sprintf 형식화된 문자열로 반환합니다.
sscanf 문자열을 형식에 따라 처리합니다.
str_replace 문자열을 찾아서 치환합니다.
strip_tags 문자열에서 HTML과 PHP 태그를 제거합니다.
strlen 문자열의 길이를 반환합니다.
strpos 문자열이 처음 나타나는 위치를 반환합니다.
strstr/strchr 문자열이 처음으로 나타나는 위치를 반환합니다.
substr 문자열의 일부를 반환합니다.
trim 문자열의 처음과 끝에 있는 공백을 제거합니다.
trim() View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$str = " 안녕하세요. ";

		//trim 사용하지 않고 출력
		echo "trim 사용하지 않고 출력 <br>";
		echo "|".$str."|";

		echo "<br><br>";

		//trim 사용
		echo "trim 사용 <br>";
		echo "|".trim($str)."|";
	?>
</body>
</html>
strtolower() strtoupper() View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$str = "Hello World";
		echo "원문<br>";
		echo $str;
		echo "<br><br>";
		echo "대문자로 출력<br>";
		echo strtoupper($str);
		echo "<br><br>";
		echo "소문자로 출력<br>";
		echo strtolower($str);
	?>
</body>
</html>
strlen() View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$str = "php수업입니다. php를 배웁니다.";

		echo $str."의 문자열 길이는" .strlen($str)."입니다.";
	?>
</body>
</html>
set_replace()

set_replace('치환할 문자','대처할 문자','대상 문자열');

set_replace() View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$str = "php수업입니다. php를 배웁니다.";

		echo $str."의 문자열 길이는" .strlen($str)."입니다.";
	?>
</body>
</html>
substr()

substr('대상문자열','자르기 시작할 위치','자를 문자열 수');

substr() View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$fileName = "img.jpg";

		$execute = substr($fileName, -4, 4);

		if($execute == '.jpg' || $execute == '.png' || $execute == '.gif'){
			echo "업로드한 파일은 이미지 파일입니다.";
		} else {
			echo "업로드한 파일은 이미지 파일이 아닙니다.";
		}
	?>
</body>
</html>
explode()

explode('나눌 문자','대상 문자열');

explode() View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$email = "webstoryboy@naver.com";
		$emailArray = explode("@",$email);

		echo "<pre>";
		var_dump($emailArray);

		echo "이메일의 호스트 출력<br>";
		echo $emailArray[1];
	?>
</body>
</html>
함수 기능
mail 메일을 보냅니다.
abs 절대값을 나타냅니다.
ceil 소수점 이하를 올림합니다.
floor 소수점 이하를 내림합니다.
pow 수를 거듭제곱합니다.
rand 정수형 난수를 생성합니다.
mt_rand 향상된 정수형 난수를 생성합니다.
round 실수를 반올림합니다.
base64_encode MIME 규약에 따라 데이터를 base64로 인코딩합니다.
base64_decode MIME 규약에 따라 인코딩된 데이터를 디코딩합니다.
urlencode 문자열을 URL 인코딩합니다.
urldecode 문자열을 URL 디코딩합니다.
empty 변수가 비어 있는지 확인합니다.
isset 변수가 설정되 있는지 확인합니다.
unset 주어진 변수를 제거합니다.
is_array 주어진 변수가 배열인지 확인합니다.

post는 HTTP 프로토콜 통신 시에 전달되는 방식이고, get은 데이터를 URL에 붙여 전달하는 방식입니다.

Get의 데이터 전달 방식

https://webstoryboy.co.kr?type=first&mobile=ok

get View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		//http://richclub8.dothome.co.kr/php/php19.php?type=first&mobile=ok

		echo "GET['type']는" .$_GET['type']. "<br>";
		echo "GET['molile']는" .$_GET['molile']. "<br>";
	?>
</body>
</html>
post View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		//http://richclub8.dothome.co.kr/php/php19.php?type=first&mobile=ok

		echo "GET['type']는" .$_GET['type']. "<br>";
		echo "GET['molile']는" .$_GET['molile']. "<br>";
	?>
</body>
</html>

class 클래스 명 {
     기능 구현
}

class View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>class</title>
</head>
<body>
	<?php
		class people {

			//생성자
			function __construct(){
				echo "사람들은 돈을 좋아합니다.<br>";
			}

			//말하기
			function speak($word){
				echo $word." 라고 말했따.<br>";
			}

			//달리기
			function run($km){
				echo $km."을 달리다. <br>";
			}

			//걷기
			function walk($km){
				echo $km."을 걷다 <br>";
			}

			//소멸자
			function __destruct(){
				echo "힘들다 <br>";
			}
		}

		//인스턴스 생성
		$people = new people;

		//메소드 사용
		$people ->speak('나는 인간이다');
		$people ->walk('산');
		$people ->run('바다');
	?>
</body>
</html>
MySQL 접속 View
<!DOCTYPE html>
<?php

	$host = "localhost";
	$user = "richclub8";
	$pw = "forever0";
	$dbName = "richclub8";
	$dbConnect = new mysqli($host, $user, $pw, $dbName);
	$dbConnect->set_charset("utf8");

	if(mysqli_connect_errno()){
		echo "데이터베이스 접속 실패";
		echo mysqli_connect_errno();
	} else {
		//echo "데이터베이스 접속 성공";
	}

?>
데이터 입력하기 - insert View
<?php
	
	//mysal 접속 소스를 include
	include_once "../connectDB.php";

	//데이터 입력
	$useID = "webstoryboy";
	$uname = "웹스";
	$upassword = "1234";
	$phone = "010-7112-2049";
	$email = "webstoryboy@naver.com";
	$birthDay = "1972-04-25";
	$gender = "m";

	//쿼리문 작성
	$sql = "INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime) VALUES";
	$sql .= "('{$useID}','{$uname}','{$upassword}','{$phone}','{$email}','{$birthDay}','{$gender}',NOW())";

	//쿼리문 전송 및 전송값을 result 변수에 대입
	$result = $dbConnect->query($sql);

	if($result){
		echo "yes";
	} else {
		echo "no";
	}

?>
데이터 입력하기2 - form View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>회원가입</h1>
	<form action="php23_insert.php" method="post" name="signUp">
		<label for="useName">이름</label>
		<input type="input" id="useName" name="useName" placeholder="이름"><br>

		<label for="useID">ID</label>
		<input type="input" id="useID" name="useID" placeholder="ID"><br>

		<label for="usePW">비밀번호</label>
		<input type="input" id="usePW" name="usePW" placeholder="비밀번호"><br>

		<label for="useGender">성별</label>
		<select name="useGender" id="useGender">
			<option value="m">남성</option>
			<option value="w">여성</option>
		</select><br>

		<label for="useEmail">이메일</label>
		<input type="email" id="useEmail" name="useEmail" placeholder="이메일 입력"><br>

		<input type="submit" value="가입하기">
	</form>
</body>
</html>
<?php
	//mysal 접속 소스를 include
	include_once "../connectDB.php";

	//post 방식으로 
	echo "<pre>";
	//var_dump($_POST);

	//이름 인증
	if($_POST['useName'] == ' ' || $_POST['useName'] == null ){
		echo "이름이 잘못되었습니다. 1.name";
		exit;
	} 

	$uname = $_POST['useName'];
	//공백제거
	$uname = trim($uname);
	//쿼리문의 따옴표 처리를 위해 real_escape_string 메소드 사용
	$uname = $dbConnect->real_escape_string($uname);


	//아이디 검증
	if($_POST['useID'] == '' || $_POST['useID'] == null){
		echo "아이디가 잘못되었습니다. 2.ID";
		exit;
	}
	$useID = $_POST['useID'];
	$useID = trim($useID);
	$useID = $dbConnect->real_escape_string($useID);


	//비밀번호 검증
	if($_POST['usePW'] == '' || $_POST['usePW'] == null){
		echo "비밀번호가 잘못되었습니다. 3.PW";
		exit;
	}
	$upassword = sha1("web".$_POST['usePW']);

	//성별 검증
	if($_POST['useGender'] == 'm' || $_POST['useGender'] == 'w'){
		$gender = $_POST['useGender'];
	} else {
		echo "해당 값을 사용할 수 없습니다. 4. useGender";
		exit;
	}

	//이메일 유효성 검삭
	$emailCheck = filter_var($_POST['useEmail'], FILTER_VALIDATE_EMAIL);
	if($emailCheck == false){
		echo "해당 이메일을 사용할 수 없습니다. 5. email";
		exit;
	}
	
	$email = $_POST['useEmail'];


	//쿼리문 작성
	$sql = "INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime) VALUES";
	$sql .= "('{$useID}','{$uname}','{$upassword}','{$phone}','{$email}','{$birthDay}','{$gender}',NOW())";


	//쿼리문 전송 및 전송값을 result 변수에 대입
	$result = $dbConnect->query($sql);

	if($result){
		echo "yes";
	} else {
		echo "no";
	}
?>
데이터 불러오기 View
<?php
	//mysal 접속 소스를 include
	include_once "../connectDB.php";

	//SELECT * FROM myMember WHERE myMemberID = 1;

	$myMemberID = 1;

	$sql = "SELECT * FROM myMember WHERE myMemberID = {$myMemberID}";

	//쿼리문 전송 및 전송값을 result 변수에 대입
	$result = $dbConnect->query($sql);

	//가져온 결과를 어떻게 분류할 것인지를 설정
	$memberInfo = $result->fetch_array(MYSQLI_ASSOC);

	echo "<pre>";
	var_dump($memberInfo);

	echo "회원번호가 {$myMemberID}법인 회원의 이름은 ".$memberInfo['uname'];
?>
전체 데이터 불러오기 View
<?php
	//mysal 접속 소스를 include
	include_once "../connectDB.php";

	//SELECT uname, useID FROM myMember; 
	$sql = "SELECT uname, useID FROM myMember";

	//쿼리문 전송 및 전송값을 result 변수에 대입
	$result = $dbConnect->query($sql);

	//레코드 수를 가져오는 명령어
	$numResult = $result->num_rows;

	if($numResult != 0){

		for($i=0; $i<$numResult; $i++){
			$memberInfo = $result->fetch_array(MYSQLI_ASSOC);
			echo "회원이름 : ".$memberInfo['uname']." 회원 ID: ".$memberInfo['useID']."<br>";
		}
	} else {
		echo "회원이 없습니다.";
	}
?>
데이터 순서대로 불러오기 View
<?php
	include_once "../connectDB.php";
	//SELECT uname, useID FROM myMember ORDER BY uname ASC;

	$sql = "SELECT uname, useID FROM myMember ORDER BY uname ASC";
	$result = $dbConnect->query($sql);

	$numResult = $result->num_rows;

	if($numResult != 0){

		for($i=0; $i<$numResult; $i++){
			$memberInfo = $result->fetch_array(MYSQLI_ASSOC);
			echo "회원이름 : ".$memberInfo['uname']." 회원 ID: ".$memberInfo['useID']."<br>";
		}
	} else {
		echo "회원이 없습니다.";
	}
?>
회원 500명 가입시키기 View
<?php
	include_once "../connectDB.php";

	//성 배열
	$familyName = array();
	$familyName = ['김','이','박','전','황','강','손','송','하','최','조','노','윤'];

	//이름 배열
	$lastName = array();
	$lastName = ['상연','상현','상순','순실','상돌','상미','상수','상금','상실','상소','상민','상가','상상','상지','상자','상장','상술','상속'];

	//성 배열
	$useGender = array();
	$useGender = ['m','w'];

	//테이블에 회원 정보 입력 성공 카운트
	$successCount = 0;
	$failCount = 0;

	//insert문을 500회 작동시키기
	for($i=1; $i<=500; $i++){
		//랜덤으로 받아오기
		$numRandomFN = rand(0,count($familyName) - 1);
		$numRandomLN = rand(0,count($lastName) - 1);
		$gender = $useGender[rand(0,1)];
		$upassword = sha1("web".rand(1,1000));
		$uname = $familyName[$numRandomFN].$lastName[$numRandomLN];
		$useID = "websotry".rand(1,9999999);
		$email = "web".rand(1,9999)."@naver.com";

		//쿼리문 작성
		$sql = "INSERT INTO myMember(useID, uname, upassword, email, gender, regTime) VALUES";
		$sql .= "('{$useID}','{$uname}','{$upassword}','{$email}','{$gender}',NOW())";
	
		$result = $dbConnect->query($sql);

		if($result){
			$successCount++;
		} else {
			$failCount++;
		}
	}

	echo "입력 성공 수 : {$successCount}";
	echo "<br>";
	echo "입력 실패 수 : {$failCount}";
?>
전체데이터 50개씩 불러오기 View
<?php
	include_once "../connectDB.php";

	//페이지값을 구함
	if(isset($_GET['page'])){
		$page = (int) $_GET['page'];
	} else {
		$page = 1;
	}

	//페이지에 출력할 레코드 수
	$numView = 50;

	//변수 page값에 따른 LIMIT의 첫 번째 값 계산
	$firstLimitValue = ($numView * $page) - $numView;

	$sql = "SELECT * FROM myMember LIMIT {$firstLimitValue}, {$numView}";
	$result = $dbConnect->query($sql);
?>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		table {width: 100%; border-spacing: 0; border-collapse: collapse;}
		table th {border: 1px solid #999; background: #f1f1f1; padding: 10px;}
		table td {border: 1px solid #999; padding: 5px;}
	</style>
</head>
<body>
	<h1>고객리스트</h1>
	<table>
		<tr>
			<th>번호</th>
			<th>ID</th>
			<th>이름</th>
			<th>이메일</th>
			<th>성별</th>
			<th>가입일</th>
		</tr>
		

<?php
	for($i=0; $i < $result->num_rows; $i++){
		$member = $result->fetch_array(MYSQLI_ASSOC);
?>		
		<tr>
			<td><?=$member['myMemberID']?></td>
			<td><?=$member['useID']?></td>
			<td><?=$member['uname']?></td>
			<td><?=$member['email']?></td>
			<td><?=(($member['gender'] == 'w') ? '여성': '남성')?></td>
			<td><?=$member['regTime']?></td>
		</tr>
<?php } ?>

	</table>
</body>
</html>
페이지 버튼 생성 View
<?php
	include_once "../connectDB.php";

	$sql = "SELECT * FROM myMember";
	$res = $dbConnect->query($sql);

	$numView = 50;

	$toralRecord = $res->num_rows;

	$numPage = ceil($toralRecord / $numView);

	for($i=1; $i<$numPage; $i++){?>
		<a href="http://richclub8.dothome.co.kr/php/php28.php?page=<?=$i?>">
			<?=$i?>
		</a>

	<?php } ?>
데이터 수정하기 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>회원 이름 변경하기</title>
</head>
<body>
	<form action="php30_update.php" method="post" name="update">
		<label for="memberID">회원번호</label>
		<input type="number" name="memberID" id="memberID">

		<label for="changeName">변경할 이름</label>
		<input type="text" name="changeName" id="changeName">

		<input type="submit" value="변경하기">
	</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	include_once "../connectDB.php";

	$myMemberID = (int) $_POST['memberID'];

	if($myMemberID == 0){
		echo "멤버 회원 아이디 값이 없습니다.";
		exit;
	} 

	if($_POST['changeName'] == '' || $_POST['changeName'] == null){
		echo "회원 이름이 올바르지 않습니다.";
		exit;
	} else {
		$changeName = $dbConnect->real_escape_string($_POST['changeName']);
	}

	$sql = "UPDATE myMember SET uname = '{$changeName}' WHERE myMemberID = {$myMemberID}";
	$res = $dbConnect->query($sql);

	if($res){
		echo "회원번호 {$myMemberID}의 이름이 {$changeName} 으로 변경되었습니다.";
	} else {
		echo "이름 변경이 안됩니다.";
	}
?>
</body>
</html>
데이터 삭제하기 View
<?php

	include_once "../connectDB.php";

	$sql = "DELETE FROM myMember WHERE myMemberID = 14";
	$res = $dbConnect->query($sql);

	if($res){
		echo "14번 회원의 정보가 삭제되었습니다.";
	} else {
		echo "삭제 실패";
	}
?>
서로 다른 테이블의 데이터 불러오기 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php

		include_once "../connectDB.php";

		$sql = "SELECT m.uname, m.gender, s.class, s.english, s.math, s.science, s.japanese, s.coding ";
		$sql .= "FROM myMember m JOIN schoolRecord s ON(m.myMemberID = s.studentID) ";
		$sql .= "WHERE m.myMemberID = 3";
		$res = $dbConnect->query($sql);

		if($res){
			$data = $res->fetch_array(MYSQLI_ASSOC);

			echo "회원번호 3번의 이름은 {$data['uname']}이며 <br> ";

			$gender = '여성';
			if($data['gender'] == 'm'){
				$gender = '남자';
			}

			echo "성별은 {$gender}이며 <br>";
			echo "{$data['class']}반 소속이며 <br>";
			echo "영어 점수는 {$data['english']}<br>";
			echo "수학 점수는 {$data['math']}<br>";
			echo "과학 점수는 {$data['science']}<br>";
			echo "일본어 점수는 {$data['japanese']}<br>";
			echo "코딩 점수는 {$data['coding']}<br>";
		} else {
			echo "정보를 불러오는데 실패했습니다.";
		}
	?>
</body>
</html>

데이터를 입력했을 때 이 값이 한글로만 구성되어 있는지 영어로만 구성되 있는지 또는 어떤 패턴으로 입력이 되었는지를 체크하는 방법을 정규표현식이라고 합니다.

preg_match()

preg_match(패턴, 검사할 텍스트, 반환할 패턴 일치 결과를 받을 변수)
$pattern = '/패턴 입력할 곳/';

패턴 작성 방법

  • 시작이 어떠한 문자로 시작해야 한다는 것을 나타낼 때는 '^'
  • 어떠한 문자로 끝나야 한다는 것을 나타낼 때는 '$'
  • 문자의 간격을 지정하고자 할 때는 '[]'
  • 시작할 문자와 끝날 문자의 간격의 사이에는 '-'을 사용합니다.
  • '[]'사이에 들어갈 값으로는 한글, 영어소문자, 영어대문자를 넣어 확인할 수 있습니다.
  • OR조건을 의미하는 기호는 '|'입니다.

한글의 간격
가-힣 정규 표현식 [가-힣]

영어 소문자
a-z 정규 표현식 [a-z]

영어 대문자
A-Z 정규 표현식 [A-Z]

한글, 영어소문자, 영어 대문자 모두를 간격을오 지정하려면
가-힣a-zA-Z 정규 표현식 [가-힣a-zA-Z]

처음부터 끝까지 한글로만 이루어진 값을 찾는다고 가정하면

^[가-힣]$

이름 정규식 표현

1회만 검사할 경우
^[가-힣]$ 또는 ^[가-힣]${1}$

1회이상 검사할 경우
^[가-힣]+$ 또는 ^[가-힣]${1,}$

3회에서 5회까지 검사할 경우
^[가-힣]{3,5}+$

정규식 이름 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$pattern = '/^[가-힣]+$/';

		$myName = '드루킹';

		if(preg_match($pattern, $myName, $matches)){
			echo "값 {$myName}은 정규식 표현에 적합합니다.";
			echo "<br>";
			var_dump($matches);
		} else {
			echo "이름에 특수문자, 영문, 숫자를 사용할 수 없습니다.";
		}
	?>
</body>
</html>

아이디 정규식 표현

$pattern = '/^[a-zA-Z0-9_]+$/';

  • 영어소문자, 영어대문자, 숫자, 특수 문자_로 시작하거나 끝나는 패턴입니다.
  • +가 있으므로 1회 이상 패턴을 검사합니다.

$pattern = '/^[^_]/';

  • ^가 '[]'의 밖에서 사용되면 처음에 오는 글자를 의미합니다.
  • ^가 '[]'의 안에서 사용되면 어떤 문자가 와서는 안된다는 것을 의미합니다.

$pattern = '/^[^_][a-zA-Z0-9_]+$/';

  • 처음에 오는 글자가 _가 아니면서 그 다음 글자가 영문 대소문자, 숫자, 그리고 _를 1회 이상 검사 하면서 마지막으로 와야 하는 글자를 표현한 패턴식입니다.
정규식 아이디 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$pattern = '/^[a-zA-Z0-9_]+$/';

		$myID = "richclub_9";

		if(preg_match($pattern, $myID, $matches)){
			echo "값 {$myID}은 정규식 표현에 적합한 값입니다.";
			echo "<pre>";
			var_dump($matches);
		} else {
			echo "사용할 수 없는 아이디입니다.";
		}
	?>
</body>
</html>

휴대폰 번호 검사

휴대폰 번호가 010-으로 시작하는 규칙을 체크하는 패턴

$pattern '/^(010|011|016|017|018|019)-/';

  • ^는 처음 오는 패턴을 의미합니다.
  • (010|011|016|017|018|019)는 010~019인 패턴을 의미합니다.
  • -는 휴대폰 번호가 010-에서 -를 의미합니다.

휴대폰 번호의 가운데에 위치하는 숫자가 3자리 또는 4자리인 숫자를 체크하는 패턴

$pattern '/^(010|011|016|017|018|019)-[0-9]{3,4}-/';

  • 패턴식 [0-9]{3,4}-는 0에서부터 9까지의 숫자를 3회에서 4회 검사한다는 의미입니다.

마지막 패턴

$pattern = '/^(010|011|016|017|018|019)-[0-9]{3,4}-[0-9]{4}$/';

  • 패턴식 [0-9]{4}$는 0에서부터 9까지의 숫자가 있는지 4회 검사한다는 의미입니다.
정규식 번호 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php

		$pattern = '/^(010|011|016|017|018|019)-[0-9]{3,4}-[0-9]{4}$/';

		$myPhone = '010-7112-2049';

		if(preg_match($pattern, $myPhone, $matches)){
			echo "휴대폰 번호로 입력한 값 {$myPhone}은 사용할 수 있습니다.";
			echo "<pre>";
			var_dump($matches);
		} else {
			echo "사용할 수 없는 번호입니다.";
		}

	?>
</body>
</html>

이메일 검사

$pattern = '/^[a-zA-Z0-9_\-\.]+/';

\-처럼 앞에 역슬래시를 사용하는 이유는 -가 정규 표현식에서 간격을 조정하는 기능을 담고 있습니다. 이것을 기능으로 사용하는 것이 아니라 문자로 사용하기 위해서는 \를 앞에 붙입니다. \를 앞에 붙이면 문자로 사용하겠다는 것을 의미합니다.

\..도 맡고 있는 기능이 있기 때문에 앞에 역슬래시를 붙여 사용합니다. .는 모든 문자를 의미합니다.

$pattern = '/^[a-zA-Z0-9_\-\.]+@/';

@를 기준으로 앞에는 아이디 정규식 뒤에는 호스트 정규식을 작성합니다.

$pattern = '/^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[\.a-zA-Z]+$/';

정규식 이메일 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$pattern = '/^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[\.a-zA-Z]+$/';

		$myEmail = "webstoryboy@naver.com";

		if(preg_match($pattern, $myEmail, $matches)){
			echo "입력한 이메일 주소 {$myEmail}는 사용 가능한 이메일 주소입니다.";
			echo "<pre>";
			var_dump($matches);
		} else {
			echo "사용 불가한 이메일 주소입니다.";
		}
	?>
</body>
</html>
파일 업로드 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>파일 업로드</h1>
	<form action="php37_file.php" name="fileUpload" method="post" enctype="multipart/form-data">
		<input type="file" name="myImage">
		<input type="submit" value="파일 등록">
	</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	
	<?php

		echo "<pre>";
		var_dump($_FILES);

		// $_FILES['myImage']['name'];
		// $_FILES['myImage']['type'];
		// $_FILES['myImage']['tmp_name'];

		//임시 저장된 정보
		$myTempFile = $_FILES['myImage']['tmp_name'];

		//파일 타입 및 확장자구하기
		$fileTypeExtension = explode("/", $_FILES['myImage']['type']);

		//파일 타입 
		$fileType = $fileTypeExtension[0];

		//파일 확장자
		$extension = $fileTypeExtension[1];

		//이미지 파일이 맞는 확인
		if($fileType == 'image'){
			//확장자가 jpg, bmp, gif, png인 경유
			if($extension == 'jpeg' || $extension =='bmp' ||  $extension == 'gif' || $extension == 'png'){
				//임시 파일 옮길 저장 및 파일명
				$myFile = './images/web.{$extension}';
				//임시 저장된 파일을 우리가 저장할 장소 및 파일명으로 옮김
				$imageUpload = move_uploaded_file($myTempFile, $myFile);

				//업로드 성고 여부 확인
				if($imageUpload == true){
					echo "파일이 정상적으로 업로드 되었습니다.";
					echo "<img src='{$myFile}' width='300' />";
				} else {
					echo "파일이 업로에 실패했습니다.";
				}
			}
			//확자자가 jpg, bmp, gif, png가 아닌 경우
			else {
				echo "허용하는 확장자 이미지 파일이 아닙니다.";
				exit;
			}
		}
		//type이 image가 아닌경우
		else {
			echo "이미지 파일이 아닙니다.";
			exit;
		}
	?>

</body>
</html>

is_dir(), opendir(), closedir(), readdir()

$dirCheck = is_dir("./images/");
해당 위치에 images 폴더가 있다면 true를 반환
해당 위치에 images 폴더가 없다면 false를 반환

$opendir = opendir("./images/");
해당 위치에서 images 폴더를 여는데 성공했다면 true를 반환
해당 위치에서 images 폴더를 여는데 실패해다면 false를 반환

//폴더 안에 파일을 읽을 때 사용합니다.
$readFile = readdir($opendir) 또는 readdir(opendir("./images"));

//열었던 디렉터리를 닫을 때 사용합니다.
close($opendir);

디렉터리 함수 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$dir = "http://richclub8.dothome.co.kr/php/images/";

		//폴더가 있는지 확인 
		if(is_dir($dir)){
			$opendir = opendir($dir);

			if($opendir == true){
				while(($file == readdir($opendir)) != false){
					echo $file."<br>";
				}
			}
			//폴더를 열지 못했을 때
			else {
				echo "해당 폴더를 열지 못했습니다.";
				exit;
			}
		}
		//폴더가 없는 경우 
		else {
			echo "해당 폴더가 없습니다.";
			exit;
		}

	?>
</body>
</html>
파일/디렉토리 함수View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>파일 업로드</h1>
	<form action="php39_fileUpload.php" name="fileUpload" method="post" enctype="multipart/form-data">
		<input type="file" name="myImage">
		<input type="submit" value="파일 등록">
	</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	//임시 저장된 정보
	$myTempFile = $_FILES['myImage']['tmp_name'];

	//파일 유형 및 확장자 정보 
	$fileTypeExtension = explode("/", $_FILES['myImage']['type']);

	//파일 유형 
	$fileType = $fileTypeExtension[0];

	//파일 확장자 
	$extension = $fileTypeExtension[1];

	//1. 이미지 파일 확인 -> 이미지 확장자 확인 -> 이미지 파일명 생성 -> 이미지 경로 저장 
	//2. 폴더 여부 확인 -> 폴더 열기 -> 파일 읽기 -> 파일 위치 옮김 -> 파일 업로드 확인 

	//이미지 파일이 맞는지 확인 
	if($fileType == 'image'){
		//이미지 확장자 파일이 맞는 확인 
		if($extension == 'jpeg' || $extension == 'jpg' || $extension == 'bmp' ||  $extension == 'gif' || $extension == 'png'){

			//저장할 파일명 생성 
			$makingFileName = "myImage".time().rand(1,99999)."."."{$extension}";

			//이미지 경로 설정 
			$myFile = "./images/{$makingFileName}";

			$dir = "./images/";

			//폴더 존재 여부 확인 
			if(is_dir($dir)){

				//폴더 열기 
				$opendir = opendir($dir);
				if($opendir == true){
					$checkFile = true;

					//파일 읽기 
					while(($readFile = readdir($opendir)) != false){
						//해당 파일이 있다면 변수 $checkFile에 false를 대입 
						if($makingFileName == $readFile){
							$checkFile = true;
							echo "해당 파일명은 이미 사용되고 있습니다.";
							break;
						}
					}
					if($checkFile == true){
						//임시 저장된 파일을 우리가 저장할 위치 및 파일명으로 옮김
						$imageUpload = move_uploaded_file($myTempFile, $myFile);

						//업로드 성공 여부 확인 
						if($imageUpload == true){
							echo "중복된 파일명이 없어 정상적으로 업로드 외었습니다.";
							echo "<img src='{$myFile}' width='200'/>";
						} else {
							echo "파일 업로드가 실패했습니다.";
						}
					}
				} else {
					//폴더를 열지 못했을 때
					echo "해당 폴더를 열지 못했습니다.";
				}
			}

		} else {
			//이미지 확장자 파일이 아닌 경우 
			echo "이미지 확장자 파일이 아닙니다.";
			exit;
		}

	} else {
		//이미지 유형이 이미지가 아닌 경우 
		echo "이미지 파일이 아닙니다.";
		exit;
	}
?>
</body>
</html>

PHP는 서버측에서 실행되는 스크립트 언어입니다.

파일 함수를 사용하면 파일을 생성한 후 텍스트 파일에 내용을 입력 할 수 있으며 파일 내용을 읽어들일 수 있습니다.

fopen()

fopen("파일 경로 및 파일명", 파일을 여는 옵션);

fwrite()

$fp = fopen("파일 경로 및 파일명");
$fw = fwrites($fp, "파일 쓸 내용");

fclose()

fclose("열린 파일");

옵션 설명
f 파일을 읽기 전용으로 열기(이 옵션으로 파일을 열면 쓰기 불가)
w 파일을 쓰기 전용으로 열기(기본 파일이 있을 경우 내용이 삭제되고 처음부터 다시 씀)
a 파일을 쓰기 전용으로 열기(기본 파일이 있을 경우 내용 뒤에 덧붙임)
r+ 파일을 읽고 쓸 수 있게 열기(기본에 파일이 있을 경우, 내용이 삭제되고 처음부터 다시 씀)
a+ 파일을 읽고 쓸 수 있게 열기(기본에 파일이 있을 경우, 내용뒤에 덧붙임)
파일쓰기View
<?php
	//파일에 쓸 내용
	$content = "Hello PHP";

	//저장할 파일명
	$fileName = "HelloWorld.txt";

	//파일 열기
	$fp = fopen('./myFiles/'.$fileName,'w');

	//파일 쓰기
	$fw = fwrite($fp, $content);

	//파일 쓰기 성공 여부
	if($fw == false){
		echo "파일 쓰기가 실패했습니다.Yes";
	} else {
		echo "파일 쓰기 완료 No";
	}

	//파일 닫기
	fclose($fp);
?>

fread()

$fp = fopen("파일 경로 및 파일명",'r+'); $fr = fread($fp, "불러올 용량");

filesize()

filesize("파일 경로 및 파일명");

file_exists()

file_exists("파일 경로 및 파일명");

파일읽기View
<?php
$filePathName = "./myFiles/HelloWorld.txt";

//1. 파일 존재 여부 확인
if(file_exists($filePathName)){
	//2. 파일 열기
	$fp = fopen($filePathName, 'r');
	if($fp){
		//3. 파일 읽기
		$fr = fread($fp, filesize($filePathName));
		if($fr){
			//4. 내용 출력
			echo $fr;
			fclose($fp);
		} else {
			echo "파일 읽기에 실패했습니다.";
		}

	} else {
		echo "파일 열기에 실패했습니다.";
	}
} else {
	echo "파일이 존재하지 않습니다.";
}
?>

fgets()

$fp = fopen("파일 경로 및 파일명", "r+");
$fr = fgets($fp, "불러올 용량");

파일쓰고 한 줄씩 읽기View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>할말이 있으면 적어주세요!!!!! 언제든지 연락주세요!!</h1>
	<form action="php42_makingFile.php" name="myText" method="post">
		<textarea name="myInputText" id="myInputText" cols="100" rows="10"></textarea>
		<input type="submit" value="전송">
	</form>
</body>
</html>
<?php
	$filePateName = "./myFiles/largeRow.php";
	
	$content = $_POST['myInputText'];

	$fp = fopen($filePateName, 'w');
	if($fp){
		$fw = fwrite($fp, $content);
		if($fw){
			echo "파일 쓰기 완료 yes";
		}
	}
?<
<?php
	$filePathName = "./myFiles/largeRow.php";

	if(file_exists($filePathName)){
		$fp = fopen($filePathName, 'r');
		$readByte = 512;
		if($fp){
			while(($fr = fgets($fp, $readByte)) != false){
				echo $fr."
"; } } } ?<

<a href="주소" ping="통계 자료를 수집할 주소">이름</a>

ping 속성View
<!DOCTYPE html>

Ajax(Asynchronous JavaScript and XML, 에이잭스)는 비동기적인 웹 애플리케이션의 제작을 위해 사용하는 웹 개발 기법이다.

AJAX - 아이디 중복 확인View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>화면 전환없이 아이디 중복 체크</title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
	<script>
		$(document).ready(function(){
			$("#idCheckBtn").click(function(){
				//AJAX 통신 시작
				$.ajax({
					type: 'post',						//post 방식으로 전달
					dataType: 'json',					//json 언어로 전달
					url: './php44_idCheck.php',
					data: {userId: $('#userId').val()},	//전달할 데이터
					async: false,						//값을 전달 받은 후 실행

					success: function(data){
						var word = "이미지 존재하는 아이디입니다.";
						if(data.result == 'good'){
							word = "아이디를 사용해도 좋습니다.";
						}
						$("#idCheckComment").text(word);
					},
					error : function(request, status, error){
						console.log('request'+request);
						console.log('status'+status);
						console.log('error'+error);
					}
				});
			});
		});
	</script>
</head>
<body>
	<input type="text" name="userId" id="userId" placeholder="아이디 입력">
	<input type="button" id="idCheckBtn" value="중복 확인">
	<div id="idCheckComment"></div>
</body>
</html>
<?php
	//echo json_encode(array('result'=>'good'));

	include_once "../connectDB.php";

	//중복 확인 요청 받은 아이디
	$userId = $dbConnect->real_escape_string(trim($_POST['userId']));

	//쿼리문 생성
	$sql = "SELECT useID From myMember WHERE useID = '{$userId}'";
	//쿼리문 질의
	$res = $dbConnect->query($sql);

	//전달할 데이터
	$jsonResult = "bad";

	//해당하는 레코드 수가 0이라면 중복되는 아이디가 없다는 뜻
	if($res->num_rows == 0){
		$jsonResult = "good";
	}

	echo json_encode(array('result'=>$jsonResult));
?>

쿠키와 세션은 어떠한 상태를 유지하는 기술입니다. 쿠키는 사용자의 컴퓨터에 상태를 저장하며 세션은 서버에 상태를 저장합니다.

쿠키를 사용할 때 주의할 점은 용량이(4kb)이기 때문에 그 이상의 데이터를 담으려면 다른 방법을 사용해야 하고 쿠기를 생성하기 전에 어떠한 문구가 있어서는 안됩니다. 쿠키 생성문은 가정 위에 위치해야 합니다. 세션도 동일

쿠기

setcookie("쿠기이름", "쿠키값", 유지시간, "쿠키 적용 경로");

1분 동안 유지 : 1분 1초 60개 : time()+60
1시간 동안 유지 : 1시간 1분 60개 : time()+(60*60)
24시간 동안 유지 : 1시간 24개 : time()+(60*60*24)

쿠키 생성View
<?php
	setcookie('myCookie','itIsMyCookie',time()+10000,'/');

	if(isset($_COOKIE['myCookie'])){
		echo "Cooking creation completed";
	} else {
		echo "Cooking creation failed";
	}
?>
쿠키 소멸View
<?php
	setcookie('myCookie',null,time()-10000,'/');

	if(isset($_COOKIE['myCookie'])){
		echo "Cooking Presence";
	} else {
		echo "Cooking Delect";
	}
?>

세션

$_SESSION['세션 이름'] = 세션 값;

섹션 생성View
<?php
	session_start();

	//세션 생성
	$_SESSION['useId'] = 'webstoryboy';

	if(isset($_SESSION['useId'])){
		echo "Session Creation complete : {$_SESSION['useId']}";
	} else {
		echo "Session Creation false";
	}
?>

ini_get(), ini_set()

ini_get("값을 확인할 php 설정 항목");
ini_set("값을 변경할 php 설정 항목", 변경할 값);

섹션 삭제

unset(세션명);

섹션 삭제View
<?php
	session_start();

	$_SESSION['mySession6'] = 'jiho';
	$_SESSION['mySession7'] = 'ddong';

	//세션 확인
	echo "<pre>";
	var_dump($_SESSION);

	//세션 삭제
	if(session_destroy()){
		echo "Section deleted successfully";
	}
?>

섹션 배열 선언 방법

$_SESSION['섹션 이름'] = array();
$_SESSION['섹션 이름']['섹션 시간'] = time();
$_SESSION['섹션 이름']['유지 시간'] = 초 단위;
$_SESSION['섹션 이름']['섹션 값'] = 값;

섹션 배열 선언 방법View
<?php
	session_start();

	//현재 시간에서 섹션 생성 시간을 빼서 차이를 구함
	$time = time() - (int) $_SESSION['mySession10']['generation'];

	//차이의 값이 섹션 유지 시간보다 크면 섹션 삭제
	echo "{$time} Has passed since the section was created.
"; if( $time > $_SESSION['mySession10']['duration'] ){ unset($_SESSION['mySession10']); } //섹션 존재 여부 확인 if( isset($_SESSION['mySession10'])){ echo "Section exists : {$_SESSION['mySession10']['value']}"; } else { echo "Section does not exist."; } ?>

extends

class 클래스명 extends 상속 받을 클래스명

클래스 상속View
<?php
	class operation{
		function plus($num1, $num2){
			$result = $num1 + $num2;
			return "{$num1} + {$num2} = ".$result;
		}
	}

	class load extends operation{}

	//load 클래스의 인스턴스 생성
	$load = new load;
	echo $load->plus(1,2);
?>

접근 제한자 종류

public : 클래스 안에서든 밖에서든 접근 가능, 상속 가능
protected : 클래스 내부에서 접근 가능, 상속 가능
private : 클래스 내부에서만 접근 가능, 상속 불가

클래스 접근 제한자View
<?php
	class hello {
		protected function say($word){
			echo $word;
		}

		public function say2($word){
			$this->say($word);
		}
	}

	$hello = new hello;
	$hello->say2("hello class");
?>
클래스 접근 제한자View
<?php
	class hello {
		protected function say($word){
			echo $word;
		}
	}

	class hello2 extends hello{
		public function say2($word){
			$this->say($word);
		}
	}

	$hello2 = new hello2;
	$hello2->say2("hello class");
?>

static

static function 메소드명(){}

접근 제한자 static function 메소드명(){}

//인스턴스를 생성하지 않고 메소드를 호출하는 방법
클래스명::메소드명();

staticView
<?php
	class hello{
		//static을 사용하여 메소드 생성
		static function output($word){
			echo "The method that prints the message
"; echo $word; } } //인스턴스 생성하지 않고 클래스 메소드를 호출 hello::output("hello world"); ?>