본문 바로가기

책 정리/생활코딩 php+mysql

생활코딩 php+mysql (1/2)

<질문>

Q: 프로그래밍에서 파일명을 적을 때 "/data", "./data" 같은 것인가?? 어쩔 때는 꼭 이걸 써야한다 그런것이 있는가?

 

Q: $list=scandir("./data"); 에서 인자를 "data"라고 해도 된다!!

     보통은 "data"이렇게 하고 말았던 것 같다. (같은 폴더안에 있으니깐 이렇게 해도 된다.)

 

A: http://www.ith.kr/chair/wh/wh1003.html (검색키워드=파일경로표시)

 

IT문화원 강좌: 10.3.1.경로(Path) 표시 방법과 경로 디렉토리 구분 기호 /

10.3.1.경로(Path) 표시 방법과 경로 디렉토리 구분 기호 / 10.3.경로(Path)의 의미와 경로 활용 10.3.1.경로(Path) 표시 방법과 경로 디렉토리 구분 기호 / 경로는 파일의 위치를 알려주는 주소입니다. 가지가 뻗어나가는 것 같은 위의 트리 구조를 문자로 표현할 때는 경로이름(패스이름, Path Name)으로 표시합니다. 경로는 파일이 있는 곳을 찾아가는 경로를 말합니다. 다시 말해 파일의 위치를 알려주는 문장입니다. 인터넷으로 비

www.ith.kr

<정리>

"/data/index.php"=>루트 디렉토리/data/index.php를 의미(엄격함)

"data/index.php"=>아래참조

 

절대경로는 루트 디렉토리부터 지정하는 경로 지정법입니다.
상대경로란 현재 와있는 디렉토리를 기준으로 지정하는 경로 지정법입니다. 절대경로란 무조건 루트 디렉토리부터 지정하는 방법입니다.

그러니까 '/GAME/PUZZLE/TETRIS' 또는 '/GAME/PUZZLE/TETRIS/TETRIS.EXE'와 같이 루트 디렉토리부터 디렉토리나 파일의 경로를 적어주는 것이 절대경로 지정방법입니다.
상대경로는 현재 디렉토리를 기준으로 지정하는 방식입니다.

그리고 'TETRIS.EXE'나 'TETRIS/TETRIS.EXE'와 같이 루트 디렉토리를 뜻하는 디렉토리 구분자가 없을 경우에는 상대경로 지정방법입니다. 'TETRIS.EXE'는 현재의 디렉토리에 있는 'TETRIS.EXE'파일을 뜻하고, 'TETRIS/TETRIS.EXE'는 현재의 디렉토리 밑에 있는 TETRIS라는 디렉토리에 있는 TETRIS.EXE를 뜻합니다.

(1) ./ping
(2) ping

(1)번의 ./ping 명령은 . 디렉토리 밑에 있는 ping를 실행시키라는 뜻입니다. . 기호는 현재 디렉토리를 뜻합니다. 따라서 ./ping는 현재 디렉토리 안에 있는 ping를 실행시키라는 명령입니다. 따라서 현재 디렉토리에 ping 파일이 있다면 해당 파일이 실행됩니다. 반면 현재 디렉토리 안에 ping 파일이 없다면 파일이 없거나 명령어 틀렸다는 오류 안내문이 표시됩니다.
./ping는 현재의 디렉토리 밑에 있는 ping를 실행하라는 의미이므로 다른 디렉토리에 있는 ping는 실행하지 않습니다.



**사진: ./ping 명령을 실행하자 그런 파일이 없다고 표시합니다.



반면 (2)번의 ping 명령은 ping를 실행하라는 의미만 있을 뿐 어떤 디렉토리에 있는 ping를 실행시켜야 하는지는 지정하지 않았습니다. 따라서 ping 명령은 다른 디렉토리에 있는 ping도 실행시킬 수 있는 가능성이 있습니다. 다만 다른 디렉토리에 있는 ping 파일을 실행시키기 위해서는 '미리 경로를 걸다'라는 조건이 필요합니다.
이 말은 프로그램을 검색할 경로를 미리 지정해둔다는 의미로, 검색할 경로를 지정해두고 사용자가 명령을 내릴 경우 해당 디렉토리를 모두 뒤져봅니다. 그리고 검색한 디렉토리에 지정한 파일이 있다면 실행시킵니다. 물론 지정된 디렉토리에 ping 파일이 없다면 역시 오류 안내문을 표시합니다.

따라서 ./ping 명령은 현재 디렉토리만 뒤져보고 현재 디렉토리에 ping가 없을 경우에는 오류를 표시하지만 ping 명령은 경로를 걸어둔 디렉토리를 뒤져본 다음에야 오류를 표시한다는 점이 차이점입니다.

<발췌 by learning php>
상대경로, 절대경로 방식이 아닌 이외의 방식으로 파일명이나 경로를 지정하면 include_path 설정을 확인하고 이 디렉터리들에서 파일을 찾지 못하면 현재 이 구문을 실행하는 파일의 디렉터리를 확인한다.(현재디렉토리!)

 

 

Q: 생활코딩 실습예제에서 페이지를 복사해서 create.php, update.php만들지 말고(비효율적이니깐) 그냥 create, update를 눌렀을 때 form창이 뜨게 하기!

 

Q: 부동소수점(floating point)?

 

Q: composer사용법 익히기

 

Q: php공식 사이트의 functional reference읽어보기!!

 

Lesson

 

++5p하단, html을 직접 타이핑 해서 만들기 지쳤다. 많아진 웹페이지를 통합적으로 관리하는 것이 힘들어 졌다(원본을 바꾸면 모두에게 적용되는 그런 관리, 마치 변수와 같이). 사이트방문자에게 웹페이지가 보관된 폴더를 공개할 수 없어 웹사이트의 소유자만이 콘텐츠 생산가능했다. ==>기계에게 html작성을 시켰다==> php, jsp 등의 탄생

++요즘에는 CMS로 인해 코딩을 몰라도 웹페이지를 만들 수 있다. ==>점점 코딩의 벽이 낮아지고 있다. 몰라도 할 수 있다.

++1990웹처음등장 5년후 php등장,,5년만에 등장했다.

++언어가 통합적 관리를 하게 해줌을 좀 더 느끼고 활용해라!! 예제에서는 4개의 페이지를 하나로 만들고, 함수를 이용하고, require(), 변수이용 등등 "통합적 관리"라는 측면을 인식하기!!

++computer는 계산하는 사람을 일컫는 말이었다. 지금은 그 직업은 사라졌다.

++0이라는 숫자는 인도에서 발명되었다.

++arithmetic operator=산술연산자

++질문

 

Q: 프로그래밍에서 파일명을 적을 때 "/data", "./data" 같은 것인가?? 어쩔 때는 꼭 이걸 써야한다 그런것이 있는가?

 

Q: $list=scandir("./data"); 에서 인자를 "data"라고 해도 된다!!

 

Q: 생활코딩 실습예제에서 페이지를 복사해서 create.php, update.php만들지 말고(비효율적이니깐) 그냥 create, update를 눌렀을 때 form창이 뜨게 하기!

 

Q: 부동소수점?

 

 

 

 

 

 

 

 

 

++5p하단, html을 직접 타이핑 해서 만들기 지쳤다. 많아진 웹페이지를 통합적으로 관리하는 것이 힘들어 졌다(원본을 바꾸면 모두에게 적용되는 그런 관리, 마치 변수와 같이). 사이트방문자에게 웹페이지가 보관된 폴더를 공개할 수 없어 웹사이트의 소유자만이 콘텐츠 생산가능했다. ==>기계에게 html작성을 시켰다==> php, jsp 등의 탄생

 

++요즘에는 CMS로 인해 코딩을 몰라도 웹페이지를 만들 수 있다. ==>점점 코딩의 벽이 낮아지고 있다. 몰라도 할 수 있다.

 

++1990웹처음등장 5년후 php등장,,5년만에 등장했다.

 

++언어가 통합적 관리를 하게 해줌을 좀 더 느끼고 활용해라!! 예제에서는 4개의 페이지를 하나로 만들고, 함수를 이용하고, require(), 변수이용 등등 "통합적 관리"라는 측면을 인식하기!!

 

++computer는 계산하는 사람을 일컫는 말이었다. 지금은 그 직업은 사라졌다.

 

++0이라는 숫자는 인도에서 발명되었다.

 

++arithmetic operator=산술연산자

 

++역사적 이유로 인해서 문자열은 String이라고 한다. 문자가 모여있다는 의미.

 

++literal= 데이터를 그 언어에서 표현할 때 쓰는 기호(by egoing)(내가 생각하는 값! 생값!)

 

++escape sequence에서 \의 의미= 일시적으로 약속된 기능으로부터 "escape"

 

++변수, 함수의 기능에는 "통합적 관리"도 있다!! = 정리하고 유지보수하는 기능도 있다! 새겨둘 것!

 

++desktop application VS web application(상대적 개념?)

 

++URL을 통한 parameter는 현재 자신의 location을 보면 알 수 있다. 그곳에 parameter설정이 있어야 $_GET으로 사용가능

 

++공부할 때 생산자로 출발하면 안된다. 소비자로서 충분히 느껴본 후 생산자가 되는 것이 훨씬 쉽다.

 

++php string에서 \n을 입력해서 개행되는 곳은 "페이지소스보기"이다. 개행을 브라우저에 출력할려면 <br>밖에 없다.

 

++expression(표현식): 최종적으로 값이 온다. 값으로 치환된다.

    statement(선언문): 값이 되지는 않는다.

 

++코딩은 복잡도가 중요하다. 최대한 복잡도가 낮게 설계해야한다.(정리가 중요하다.) 일정 복잡도를 넘으면 인간의 사고능력으로는 컨트롤 할 수 없기 때문에, 복잡도를 관리하는 것은 매우 중요하다!(그래서 정리도구의 일환으로 배열, 함수, require, library등이 있다.)더 큰 복잡도에 도전하기 위해 정리해야한다.(기계는 함수를 쓰든 안쓰던 상관없다. 사람을 위해 만들어 진 것!!)

 

++함수로 코드를 정리해야한다. 두 코드가 같은 코드라고 단정짓기 어렵고, 통합적 관리가 가능해진다.+가독성이 높아진다.

 

++file_get_contents, file_put_contents

 

++구글링할 때 이해되지 않는 것이 있을 수 있다. 영어가 안읽히거나, 코드 자체가 이면에 좀 더 복잡한 개념을 품고 있어서 아예 이해가 안 될 수도 있다. 현실의 문제와 이때까지 만나왔던 학교의 문제는 판이하게 다르다. 현실에는 1년, 10년 또는 평생동안 문제의식을 가지고 정기적으로 방문하면서 해결해야하는 문제도 있다. 문제를 해결하는 사람에게 있어서 문제는 우리가 말살해야 하는 적대적 대상이라기보다 그 문제가 있기 때문에 내가 존재하는 의미가 있다라는 점에서 사랑의 대상이기도 하다.

 

++함수의 설명중[]부분은 넣어도 좋고 안넣어도 좋다!

ex) function(a[,b[,c]])이면

3가지 경우의 수가 있다. function(a), function(a,b), function(a,b,c)!!

다만 구조상 function(a,c)이런건 안된다!!

 

++count() 배열의 길이반환

 

++echo "oneline\nanotherline"==>oneline anotherline(브라우저)==>oneline

                                                                                           anotherline(페이지소스보기)

 

++var_dump(),print_r() 자료형+값을 출력

 

++".."=부모디렉토리

 

++어렵게 기반기술을 개발하는 것 보다 이런 것들을 이용해서 일반인들에게 서비스를 제공하는 것이 더 상업성이 좋은것 같다.(데일리 호텔)(코딩세계는 대부분 무료+너무 어렵다.)

 

++조건문에서 조건은 최대한 직접적인 것이 좋다!!(내가 생각하지 못한 변수를 막아준다.)

 

++최소한의 문법으로, 세련되지 않은 방법으로 문제를 해결하는 과정을 충분히 수련할 필요가 있다. 이것이 세련됐는지 아닌지를 파악하기는 어렵지만 더 많은 것드릉ㄹ 배우려는 욕심이 생길 수 있기 때문에 가장 기본적인 것으로 세련되지 않게 문제를 해결하는 수련이 필요하고, 그것이 실력이다.(영어를 오랫동안 공부했는데도 영어로 말을 만들어내지 못한다. 단순한 어휘로 의미를 만드는 연습도 필요하다.)

 

++하나의 함수는 하나의 기능만 담는다. 더하기면 더하기지 더한 후 파일에 저장한다던가 이런 기능을 추가해서 함수를 정의하면 범용성이 떨어진다. 함수에 2가지 기능을 넣었더니 오히려 범용성이 줄어들었다.

 

++내장함수=built in function

 

++qoute로 묶여있지 않으면 변수or 함수이다. 변수=인자를 받는 공간없다/함수=인자를 받는 공간 있다.

 

++매개변수(parameter): function(a, b)에서 a와b를 의미! 구체적인 값 보다는 변수, 인자(argument): 매개변수에 들어가는 구체적인, 실체적인 값! 

 

++CRUD(create, read, update, delete)

 

++form태그에는 기본적으로 action페이지로 넘어가는 기능이 내장되어있다.

 

++redirection(페이지이동)

 

++연관배열=associate array

 

++php안에서는 html문법들이 작동하지 않는다! echo문에 넣어야 작동하게된다. html안에 php를 넣을려면

<html>

 <?php

  ?>

</html>이런 형식을 취하면 된다!! 그리고 이런 구조를 가져야 php를 열고닫는 구조를 취할 수 있다.

 

++echo=print=<?= ?>

 

++input 태그에서 placeholder=연한글자, value=초기값, textarea는 </textarea>가 필수고 초기값은 value가 아니라 태 태그자체의 "내용"이다.

 

++rename()

 

++lib, function을 만들 때는 그 함수가 context에 의존하지 않도록 설계해야한다.(독립적이도록!)(context=함수가 나오기 전의 전역변수, 지역변수 상황같은 "흐름".)

 

++우리가 아는 네이버, 구글, 페이스북, 카카오 등도 본질은 CRUD에 갇혀있다. 그만큼 중요하다.

 

++POST로 전송하기 위해서는 form이 필요하다. GET같은경우 form or URL rewriting하면 되지만 POST는 form이 필수적.(form태그에는 페이지 이동기능이 포함되어있다.)

 

++처음부터 이상적인 코드를 짤 수는 없다(처음부터 중복되는 부분을 함수와 require_once()로 모두 설계하여 제작할 수는 없다.) But, 최대한 시작전에 설계할려고 노력해보기!!!(그래야 질 좋은 코드가 나오고 여기서 레벨차이가 발생할 것 같다!!)(코드 구조에 대해, 문제 해결방법에 대해 생각 할 때는 모니터보단 종이와 펜을 들고 생각하기!! 모니터보면 눈아파서 생각이 잘 안된다..그림을 활용하지 못하기도 하고..)

 

++require(), require_once() 함수들은 내부적으로 복잡한 메커니즘이 있는 것이 아니라 단순히 코드를 붙여넣는다고 생각하면 된다. ex)top.php, bottom.php가 있을 때 top에는 <html><head><body>, bottom에는 </html></head></body>가 있다면 index.php에는 <html>을 쓸 필요가 없다!

 

++library를 만들거나 보여지는 부분을 따로 뺄 때는 인과관계, 출처가 명확하게 설계해라!

ex) top.php에는 print_tilte()이 있다. but print_title의 정의는 lib.print에 있다. index.php에서는 lib.print를 먼저 top.php를 나중에require_once하면 되지만 top.php를 보았을 때 함수의 출처가 명확하지않다!. 이럴 땐 top.php에 require_once("lib.print")를 해줘서 인과관계 나타내기!!(226p)

 

++php에서는 함수 중복정의를 허용하지 않기 때문에 require()보단 그냥 require_once()쓴다고 생각하면 편하다.(226p)

 

---------------------------------------------------------security-----------------------------------------------------------------

<XSS(cross site scripting)>

++보안과 관련해서 현실은 시궁창, 눈감으면 코베어가는 세상이다 보안 문제에 신경을 쓰자!

 

++xss는 html을 거쳐야 하는 방법이기 때문에 htmlspecialchars()를 이용해 많이 방어할 수 있다.

사용자가 입력창에 스크립트 태그를 삽입하고 이 태그가 처리되든 상관없다. 결과적으로 핵심은 마지막에 악성 스크립트가 포함된 html이 "출력"되기 위해 읽히는 과정에서 발동되므로 "사용자가 입력한 결과를 출력하는 부분"은 "모두" 의심해야 한다!!(htmlspecialchars()는 사용자가 입력한 정보를 읽어올 때 바로 적용하든, 입력받은 정보를 출력할 때 적용하든 상관없다!!)

(htmlspecialchars()는 php가 제공하는 함수)

(사용자가 악성 스크립트를 주입해도 그것이 html로 넘어가지 않는다면 작동하지 않는 구조!)

 

++본문에 htmlspecialchars()를 적용하면 이미지 태그, 줄바꿈 처럼 몇몇 필수적으로 필요한 태그를 이용하지 못할 수 도 있다. 그래서 php에서 strip_tags()라고 하는 함수를 제공==>이 함수는 태그를 모두 날리는데, 특정 태그는 허용되도록 옵션을 조정할 수 있다.

핵심은 사용자가 입력한 정보를 무조건 불신하라는 것이다!

 

 

<파일경로보호>

이건 그냥 책 읽어봐

 

++저는 여러분이 공부만 하지 않으면 좋겠습니다. 모든 것을 공부하고 난 뒤 프로젝트를 하겠다는 생각에 저는 반대. 최소한의 문법과 api를 이용해 자신의 문제를 최대한 해결해보는 것. 그 방법이 효율적이고 아름답지 않더라도 이를 통해  불쾌함을 느끼면서 스스로 발전할 수 있다. 지금까지 너무 많은 것을 배웠기 때문에 이것을 털어내고 최소한의 지식으로 문제를 최대한 해결하는 노력을 해봐야 한다.

 

<수업을 마치며>

이것도 걍 읽어봐!

 

'책 정리 > 생활코딩 php+mysql' 카테고리의 다른 글

생활코딩 php+mysql (2/2)  (0) 2020.03.18