본문 바로가기

WEB/PHP

생활코딩[PHP 기본수업] - 정리 (php 초기 설정, 기본 개념)

 

 

https://opentutorials.org/course/62 을 바탕으로 작성했습니다. 

 

PHP 기본 수업 - 생활코딩

개요 PHP는 서버 측에서 실행되는 프로그래밍 언어로 HTML을 프로그래밍적으로 생성해주고, 데이터베이스와 상호작용 하면서 데이터를 저장하고, 표현합니다. PHP는 웹을 위해서 만들어졌고, 지금

opentutorials.org

 

 

PHP는 서버 측에서 실행되는 프로그래밍 언어로 HTML을 기본으로 알고 있어야 합니다. 

 

 

윈도우에 PHP 설치하기 

(맥에 php 설치하기 : https://opentutorials.org/course/62/5104)

(리눅스에 php 설치하기 : https://opentutorials.org/course/62/5105)

 

 

PHP로 동작하는 웹 어플리케이션을  서비스하기 위해선 외부에서 인터넷을 통해 php가 설치된 컴퓨터로 접속이 가능하도록 환경을 구성해야 합니다. 그러기 위해선 apache, PHP , MySQL (AMP)가 모두 설치 되어야 합니다. 이 셋을 각자 설치하고 셋팅하기 보단 https://bitnami.com/stack/wamp bitnami를 이용해 설치하면 한번에 설치가 가능합니다.

 

bitnami를 통해 설치가 완료됐다면, WAMP packaged by Bitnami Manager Tool 프로그램이 생성됐을 것이다. 

 

 

 

* localhost/index.html 

주소창에 localhost/index.html을 입력했을 때 해당 화면이 나오면 성공한 것이다!

(이 때, localhost는 서버와 클라이언트가 각자 다른 컴퓨터가 아닌 같은 컴퓨터에 있음을 명시하는 것이다. )

 

 

* index.html

이 때, index.html은 어디에 있을까?

1. Open Application Folder를 클릭하면 WAMP 폴더가 열린다. 

2. Bitnami -> wampstack-8.0.12-0 -> apache -> htdocs로 이동하면 index.html 파일이 존재한다. 

 

 

 

* php 파일

index.html과 별개로 직접 php파일을 생성해서 실행해보자!

위에서 언급했던 htdocs폴더에서 phpinfo.php 파일을 생성해보자. 

1. 새로만들기 -> 텍스트 문서로 php파일을 만든다. 

이 때, 확장자를 txt가 아닌 php로 바꿔준다. 보통 확장자는 보이지 않아 파일이름 뒤에 .php를 작성해도 텍스트 문서로 저장된다. 

(상단에 보기 창에서 파일확장명을 체크해준다. 그 이후, .txt를 지우고 .php로 작성해주면 php파일로 바뀐다)

 

2. phpinfo.php를 열어준다. 

이 때, 메모장, notepad 등 아무거나 상관없다. 

 

3. 해당 코드를 작성해준다. (저장 해야함)

<?php
phpinfo();
?>

 

4. localhost/phpinfo.php 로 이동해보자. 

이렇게 화면이 나오면 성공!

 

 

 

bitnami 설정하기 

bitnami 셋팅을 수정해보자!

apache 폴더가 아닌 php 폴더에 들어가면 php.ini , php.ini-development, php.ini-production이 존재한다.

php.ini 를 실행해 원하는 옵션들을 바꿔주면 된다.

php.ini-development나 php.ini-production으로 설정하고 싶으면 해당 파일을 복사해 php.ini로 덮어써주면 된다. 

 

 

 

첫번째 PHP 에플리케이션

이제 직접 php 에플리케이션을 만들어보자!

 

다시 apache-> htdocs 디렉토리로 이동해주자. 

1. firstapp 폴더 생성 (이름은 본인 마음대로)

2. firstapp 폴더에서 helloworld.php를 생성 후, 열어준다 (위에 phpinfo.php와 같은 방법)

3. 해당 코드 작성해주기

<?php
echo "Hello world";
?>

4. localhost/firstapp.helloworld.php 열어보기

가 나오면 성공!

 

 

 

숫자와 문자

<?php
 echo 6/2
?>

결과 : 3

 

var_dump() : 해당 값을 data type과 함께 출력해준다. 

<?php
var_dump(1);
?>

결과 : int

 

<?php
var_dump(1.5);
?>

결과 : float

 

 

 

변수

변수 선언 방법 : $을 사용해준다. $를 통해 변수임을 나타내기.

<html>
<body>
<?php
$a=1;
echo $a+1; #2
echo "<br />";
$a=2;
print $a+1; #3
?>
</body>
</html>

* 주석 : #, //, /* */ 

 

숫자가 아닌 값도 변수의 값이 될 수 있다. 

<html>
<body>
<?php
$first = "coding";
echo $first." everybody";
?>
</body>
</html>

 

상수는 변하지 않기 때문에, 상수에 다른 값을 대입할 수 없다. (1=2)

* 상수를 정의할 때, define을 사용할 수 있다. (상수는 값을 변경할 수 없기 때문에 재정의할 수 없다.

<html>
<body>
<?php
define('TITLE', 'PHP Tutorial');
echo TITLE;
define('TITLE', 'JAVA Tutorial');
?>
</body>
</html>

# 결과
# PHP Tutorial
# Notice: Constant TITLE already defined in C:\BitNami\wampstack-5.4.20-0\apache2\htdocs\variable\variable8.php on line 6

 

 

PHP는 변수의 data type을 미리 지정할 필요가 없다. 

다른 형식의 데이터를 넣으면 자동으로 변경된다. PHP의 장점이자 단점이다.

<html>
<body>
<?php
$a = 100;
$a = "test";
$a = array(1,2,3);
?>
</body>
</html>

 

 

비교

<html>
<body>
<?php
echo "1==2 : ";
var_dump(1==2);           #false
echo '<br />';
echo "1==1 : ";
var_dump(1==1);           #true
echo '<br />';
echo '"one"=="two" : ';
var_dump("one"=="two");   #false
echo '<br />';
echo '"one"=="one" : ';
var_dump("one"=="one");   #true
echo '<br />';
?>
</body>
</html>

#1==2 : bool(false) 
#1==1 : bool(true) 
#"one"=="two" : bool(false) 
#"one"=="one" : bool(true)

 

 

<html>
<body>
<?php
echo "1!=2 : ";
var_dump(1!=2);           #true
echo '<br />';
echo "1!=1 : ";
var_dump(1!==1);           #false
echo '<br />';
echo '"one"!="two" : ';
var_dump("one"!="two");   #true
echo '<br />';
echo '"one"!="one" : ';
var_dump("one"!="one");   #false
echo '<br />';
?>
</body>
</html>

#1!=2 : bool(true)
#1!=1 : bool(false)
#"one"!="two" : bool(true)
#"one"!="one" : bool(false)

 

<html>
<body>
<?php
echo "10>20 : ";
var_dump(10>20);           #false
echo '<br />';
echo "10>1 : ";
var_dump(10>1);           #true
echo '<br />';
echo '10>10 : ';
var_dump(10>10);   #false
?>
</body>
</html>

#10>20 : bool(false)
#10>1 : bool(true)
#10>10 : bool(false)

 

<html>
<body>
<?php
echo "10>=20 : ";
var_dump(10>=20);           #false
echo '<br />';
echo "10>=1 : ";
var_dump(10>=1);           #true
echo '<br />';
echo '10>=10 : ';
var_dump(10>=10);   #true
?>
</body>
</html>

#10>=20 : bool(false)
#10>=1 : bool(true)
#10>=10 : bool(true)

 

===은 값 뿐만 아니라 데이터 형식까지 동일해야 한다. 

echo "1 == '1' : ";
var_dump(1 == '1');
echo "<br />1 === '1' : ";
var_dump(1 === '1');

 

 

 

입출력 그리고 폼과 HTTP

 

$_GET [ ] : 배열

<?php
echo $_GET['id'].','.$_GET['password'];
?>

란 PHP 어플리케이션을 실행시키면 

 

 

해당 주소에 localhost/IO_form/2.php?id=k8805&password=111111 라고 나온다

localhost/IO_form/2.php : IO_form 폴더에 있는 2라는 이름의 php 어플리케이션을 실행.

? : 주소와 입력데이터를 구분해준다

& : 값들 사이의 구분자

id,password : 값들의 이름

k8805,111111 : 값

= : 값의이름과 값 사이의 구분자

 

 

HTML Form

그러나 사용자가 직접 주소창에 이름과 값을 작성해주기 번거롭기 때문에, form을 사용한다.

 

<html>
<body>
    <form method="get" action="2.php">
        id :  <input type="text" name="id" />
        password :  <input type="text" name="password" />
        <input type="submit" />
    </form>
</body>
</html>

id, password : 입력받기. 속성 name의 값을 이름으로 데이터가 서버로 전송된다.

action : submit을 클릭했을 때 입력된 정보가 전송되는 url

get : url에 데이터를 첨부하는 방식 (반대인 post는 http 메세지 본문에 데이터를 포함해 전송한다)

 

 

GET VS POST 방식

위에서 get에 대해 언급했는데, get과 post에 대해 좀 더 알아보자.

get은 url에 데이터를 첨부하는 방식이다. 만약 아이디와 비밀번호를 입력했을 때 get을 사용한다면 url상에 아이디와 비밀번호가 그대로 노출된다. 이럴 경우 post방식을 통해 아이디와 비밀번호 데이터를 전송한다. 

<html>
<body>
    <form method="POST" action="4.php">
        id :  <input type="text" name="id" />
        password :  <input type="text" name="password" />
        <input type="submit" />
    </form>
</body>
</html>

 

php 에서 사용예시

<?php
echo $_POST['id'].','.$_POST['password'];
?>

 

 

 

조건문

: 조건에 따른 동작을 실행시킬 수 있다. 

 

<if> : 조건문에서 기본이 된다

<?php
if(true){
    echo 'result : true';
}
?>
<?php
if(false){
    echo 'result : true';
}
?>
<?php
if(true){
    echo 1;
    echo 2;
    echo 3;
    echo 4;
}
echo 5;
?>
<?php
if(false){
    echo 1;
    echo 2;
    echo 3;
    echo 4;
}
echo 5;
?>

 

<else> : if에 해당하지 않는 경우에 대한 처리를 맡는다

<?php
if(true){
    echo 1;
} else{
    echo 2;
}
?>
<?php
if(false){
    echo 1;
} else{
    echo 2;
}
?>

 

<else if> : if가 아니면서 else if에 해당할 때

<?php
if (false){
    echo 1;
} else if (true){
    echo 2;
} else if (true){
    echo 3;
} else {
    echo 4;
}
?>
<?php
if (false){
    echo 1;
} else if (false){
    echo 2;
} else if (true){
    echo 3;
} else {
    echo 4;
}
?>
<?php
if (false){
    echo 1;
} else if (false){
    echo 2;
} else if (false){
    echo 3;
} else {
    echo 4;
}
?>

 

 

변수와 비교연산자 그리고 조건문

지금까지 배운 것들을 응용해보자 ! 

 

이 때 html문서와 php 어플리케이션은 같은 디렉토리에 있어야 한다.

<html>
<body>
    <form method="get" action="11.php">
        <input type="text" name="id" />
        <input type="submit" />
    </form>
</body>
</html>

 

<?php
if($_GET['id'] === 'egoing'){
    echo 'right';
} else {
    echo 'wrong';
}
?>

id를 egoing으로 입력했을 땐 right이, 그 외 다른 값으로 입력했을 땐 wrong이 결과값으로 나온다.

 

 

조건문의 중첩

if안의 if문. 바깥 if도 , 안쪽 if도 만족해야 한다.

<html>
<body>
    <form method="post" action="13.php">
        id :  <input type="text" name="id" />
        password : <input type="text" name="password" />
        <input type="submit" />
    </form>
</body>
</html>
<?php
if($_POST['id'] === 'egoing'){
    if($_POST['password'] === '111111'){
        echo 'right';
    } else {
        echo 'password wrong';
    }   
} else {
    echo 'id wrong';
}
?>

 

논리 연산자

<and> == && : and 전 후 모든 조건을 만족할 때만 true

<html>
<body>
    <form method="post" action="16.php">
        id :  <input type="text" name="id" />
        password : <input type="text" name="password" />
        <input type="submit" />
    </form>
</body>
</html>
<?php
if($_POST['id'] === 'egoing' && $_POST['password'] === '111111'){
    echo 'right';
} else {
    echo 'wrong';
}
?>

 

<or> : or 전후 조건 중 하나만 만족해도 true

<html>
<body>
    <form method="post" action="19.php">
        id :  <input type="text" name="id" />
        <input type="submit" />
    </form>
</body>
</html>
<?php
if($_POST['id'] === 'egoing' or $_POST['id'] === 'k8805' or $_POST['id'] === 'sorialgi'){
    echo 'right';
} else {
    echo 'wrong';
}
?>

 

<!> : 현재 boolean을 바꿔주기. true는 false로, false는 true로

<?php
if (!true and !true){
    echo 1;
}
if (!true and !false){
    echo 2;
}
if (!false and !true){
    echo 3;
}
if (!false and !false){
    echo 4;
}
?>

 

 

반복문

1. while

while(조건){ }

2. for

for(초기화; 반복 지속 여부; 반복 실행){ }

 

<반복문 제어하기>

break

: 작업을 중단하고 싶을 때 사용. 보통 if문과 같이 사용하는 경우가 많다 if($i==5) break;

continue

: 작업을 중단하지 않고, 블락안에 있는(반복문) continue이하의 코드들은 실행하지 않고 반복문은 지속된다

 

<반복문의 중첩> 

반복문도 중첩될 수 있다.

 

 

함수

함수 생성 : function 함수명 (인자들){ 코드 .. . . .return 반환값;}

함수 실행 : 함수명();

 

<?php
function numbering(){
    $i = 0;
    while ($i < 10) {
        echo $i;
        $i += 1;
    }
}
numbering();
?>

 

<입력과 출력>

return : 출력

return을 실행한 이후엔 함수가 종료된다. 따라서 여러 값을 return해도 맨처음 return만 실행되고 나머지는 실행되지 않는다

<인자>

: 함수로 유입되는 입력 값 

<?php
function get_arguments($arg1, $arg2){
    return $arg1 + $arg2;
}
echo get_arguments(10, 20);
echo get_arguments(20, 30);
?>

이 때, 인자를 기본값으로 줄 수도 있다.

<?php
function get_arguments($arg1=100){
    return $arg1;
}
echo get_arguments(1);
echo ',';
echo get_arguments();
?>

 

 

배열

: 연관된 데이터들을 한번에 모아서 관리하기 위해 사용하는 데이터 타입

<?php
$member = array('egoing', 'k8805', 'sorialgi');
?>

해당 코드는 egoin, k8805, sorialgi 를 하나의 배열에 담은 것이다.

<?php
$member = ['egoing', 'k8805', 'sorialgi'];
echo $member[0].'<br />';
echo $member[1].'<br />';
echo $member[2].'<br />';
?>

 

배열 사용 방법

<?php
function get_members(){
    return ['egoing', 'k8805', 'sorialgi'];
}
 
$members = get_members();
 
for($i = 0; $i < count($members); $i++){
    echo ucfirst($members[$i]).'<br />';
}
 
?>

배열의 데이터를 인덱스([])를 통해 하나씩 접근할 수 있다. 

 

<배열 크기 알아내기> : count 함수 사용

<?php
$l = [1, 2, 3, 4, 5];
echo count($l);
?>

 

<배열 조작하기>

아이템 하나 추가하기 : array_push 사용

<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
array_push($arr, 'f');
var_dump($arr);
?>

 

아이템 여러개 추가하기 : array_merge 사용

<?php
$li = ['a', 'b', 'c', 'd', 'e'];
$li = array_merge($li, ['f','g']);
var_dump($li);
?>

 

배열 처음에 아이템 추가하기 : array_unshift 사용

<?php
$li = ['a', 'b', 'c', 'd', 'e'];
array_unshift($li,'z');
var_dump($li);
?>

 

특정 위치에 아이템 추가하기 : array_splice 사용

<?php
$li = ['a', 'b', 'c', 'd', 'e', 'z'];
array_splice($li, 2, 0, 'B');
var_dump($li);
?>

 

배열 첫번째 아이템 제거하기 : array_shift 사용

<?php
$li = ['a', 'b', 'c', 'd', 'e', 'z'];
array_shift($li);
var_dump($li);
?>

 

배열 마지막 아이템 제거하기 : array_pop 사용

<?php
$li = ['a', 'b', 'c', 'd', 'e', 'z'];
array_pop($li);
var_dump($li);
?>

 

배열 정렬하기 : sort (역순으로 정렬할 땐 rsort)

<?php
$li = ['c','e','a','b','d'];
sort($li);
var_dump($li);
?>

 

<연관 배열>

문자를 인덱스로 사용 가능함으로써, 하나의 배열을 key, value 형태로 사용할 수 있다.

<?php
$grades = array('egoing'=>10, 'k8805'=>6, 'sorialgi'=>80);
?>
<?php
$grades = [];
$grades['egoing'] = 10;
$grades['k8805'] = 6;
$grades['sorialgi'] = 80;
var_dump($grades);
?>

 

키 가져오기

<?php
$grades = array('egoing'=>10, 'k8805'=>6, 'sorialgi'=>80);
echo $grades['sorialgi'];
?>

 

반복 작업하기

<?php
$grades = array('egoing'=>10, 'k8805'=>6, 'sorialgi'=>80);
foreach($grades as $key => $value){
    echo "key: {$key} value:{$value}<br />";
}
?>