2016년 1월 6일 수요일

PHP 기본

client가 browser에서 특정 url 주소를 입력하면 서버컴에 있는 웹서버(예를 들면 apache) 해당 html 파일을 찾아서 client 보내준다.
client컴 사용자가 브라우저에서 입력이나 파일 업로드를 실행하면 html 내의 form action부분에 명시된 php파일이 서버로 호출된다. 웹서버 자신은 php 직접처리 못하므로 하단의 php engine에게 php파일 처리를 위임한다. php 코드는 html 만들어 내고 이에 따라 동적으로 생성된 문장을 html 코드에 추가하여 이를 client 다시 보내고 browser 이를 표시한다.




html 문서 내의 "<?php" "?>" 사이에 코드를 삽입하여 사용한다.
<html>
<body>

<?php
     echo “Hello world”;
?>

</body>
</html>


var_dump(7); # 인자에 변수나 상수, 배열 등을 넣으면 타입 출력

$a=1; #변수의 선언
echo $a+1; #2
echo “<br />” #줄바꿈

$first = “coding”; #문자열 변수 선언
echo $first.” everybody”; # “.”으로  문자열 연결해줌, “coding everybody”출력 


<?php
     echo $_GET[‘id’];
?>

browser에서 http://localhost/IO_form/25.php?id=egoing으로 호출 하면 server php코드는 egoing 출력한다.   http는 hyper text transfer protocal로 전송규약이다. 


클라이언트(browser)에서 실행된 html 코드
<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 코드 (위 html과 같은 위치에 있어야 함)
<?php
     echo ${\$}$_POST['id'].','.${\$}$_POST['password'];
?>

client POST방식으로 호출 시는 url 파라메터가 표시되지 않으며, php에서도 $_POST 넘어온 값을 얻는다.





조건문
and, or, true, false 같은 연산자를 사용한다.

<?php
     if(${\$}$_POST[‘id’] ===‘going’ and $_POST[‘password’]===‘1111’) {
         echo ‘right’;
     } else {
          echo “wrong”;
     }
?>


반복문
for, whie 사용한다.

<?php
     for(${\$}$i = 0; ${\$}$i < 10; $i++){
         echo 'coding everybody' . $i . "<br />";
     }
?>


for(${\$}$i = 0; ${\$}$i < 10; $i++){
    if(${\$}$i === 5){
        break;
    }
    echo "coding everybody{$i}<br />";
}





함수의 사용


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



배열의 사용


<?php
$member = ['egoing', 'k8805', 'sorialgi'];
$member2 = array('egoing', 'k8805', 'sorialgi'); #v5.4이하 하위 호환성을 위해 사용
?>

<?php
function get_members(){
    return ['egoing', 'k8805', 'sorialgi'];
}

$members = get_members();

for(${\$}$i = 0; ${\$}$i < count(${\$}$members); $i++){
    echo ucfirst(${\$}$members[$i]).'<br />';   #ucfirst 첫자를 대문자로 바꾸어 출력하게 해줌
}
?>

배열 조작 명령
array_push, array_merge, array_unshift, array_splice, array_shift, array_pop, sort, rsort


연관배열은 요소접근 index 정수가 아니고 문자열인 배열
<?php
$grades = array('egoing'=>10, 'k8805'=>6, 'sorialgi'=>80);
?>

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

연관배열의 반복작업은 foreach 사용
<?php
$grades = array('egoing'=>10, 'k8805'=>6, 'sorialgi'=>80);

foreach(${\$}$grades as ${\$}$key => ${\$}$value){
    echo "key: {${\$}$key} value:{$value}<br />";
}
?>



파일제어

복사
$file = 'readme.txt';
$newfile = 'example.txt.bak';

if (!copy(${\$}$file, $newfile)) {
    echo "failed to copy $file...\n";
}

삭제 
unlink('deleteme.txt');


읽기
$file = './readme.txt';
echo file_get_contents($file);
쓰기
$file = './writeme.txt';
file_put_contents($file, 'coding everybody');

네트웍 통해서 읽기
echo $homepage;




이미지데이터 업로드

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
</head>   
<body>
<form enctype="multipart/form-data" action="1.php" method="POST">
   <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
   #서버로 전송되는 데이터 중에서 숨겨진 정의. 최대파일 크기를 제한 시킴
   <input name="userfile" type="file" />
   <input type="submit" value="upload" />
</form>
</body>
</html>



<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
</head>   
<body>

<?php

#var_dump($_FILES) #업로드 후에 넘어온 변수 확인할 있음
#exit; #테스트 이후 부분은 무시

ini_set("display_errors", "1"); #에러를 화면에 출력

$uploaddir = 'C:\BitNami\wampstack-5.4.20-0\apache2\htdocs\upload\file\\';
#서버 컴퓨터에 업로드된 전송된 이미지를 저장할 위치

${\$}$uploadfile = ${\$}$uploaddir . basename($_FILES['userfile']['name']);
#저장할 경로+파일명. basename 경로나 기타추가된 사항은 뗴어내고 파일이름 자체만 리턴하는 함수

echo '<pre>';

if (move_uploaded_file(${\$}$_FILES['userfile']['tmp_name'], $uploadfile)) {
#move~함수는 보안이나 형식 체크후 파일을 $uploadfile 위치로 옮김
    echo "파일이 유효하고, 성공적으로 업로드 되었습니다.\n";
} else {
    print "파일 업로드 공격의 가능성이 있습니다!\n";
}
echo '자세한 디버깅 정보입니다:';
print_r($_FILES);
print "</pre>";

?>

<img src=“file/<?=$_FILES[‘user file’][‘name’]?>” />
#서버의 특정경로 위치에 접근하여 파일가져와서 client 화면에 출력하기 위함.
#(?=<pattern>) pattern 존재하는지 찾아붙임

</body>



References

댓글 없음:

댓글 쓰기