728x90

WebStorm 에서 수정한 소스를 실시간 미리보기 하기 위한 방법이다.

변경된 사항을 확인할때 F5(새로고침) 버튼 누름없이 자동으로 리프레쉬시키는  모듈을 설치하는 방법이라고 보면 된다.

 

Live Server 설치 방법

왼쪽 하단에 있는 버튼을 눌러서 Terminal 을 선택하거나 Alt + F12 키를 누른다.

 

 

이제 live-server 를 입력한다.

 

위와 같은 에러 메시지가 나오면서 제대로 동작되지 않는다.

 

Digital Sign이 되지 않은 PowerShell 스크립트를 실행하는 방법.
Windows – R 키를 눌러 실행을 연다.
powershell.exe -noexit -executionpolicy unrestricted

위와 같이 해주었는데도 불구하고 WebStorm 에서는 동작되지 않는다.

 

Set-ExecutionPolicy -Scope CurrentUser
unrestricted
를 해주고 live-server 를 입력해주면 된다.

 

8080 포트를 다른 곳에서 사용하고 있다고 자동으로 다른 포트를 자동할당하더라.

Web 브라우저 상에서는 WebStorm 에서 작성한 코드를 저장하면 자동으로 변경되는 걸 확인할 수 있어 매우 편리하다.

 

Live Server 종료시키는 방법

Ctrl + C 를 눌러주면 Live Server 모드에서 자동 해제된다.

 

블로그 이미지

Link2Me

,
728x90

VSCode(Visual Studio Code)에서 자바 스크립트 코드를 작성하고 실행하는 방법을 테스트하고 적어둔다.

 

1. 윈도우용 node.js 설치 파일을 받아서 설치한다.

   https://nodejs.org/ko/download/ 에서 윈도우용 64비트 설치파일을 받아서 설치한다.

 

2. node.js 를 기본으로 설치한 다음에...

   콘솔창에서

   $node -v

   $npm -v

   최신버전 npm 설치는

   $npm install -g npm@latest  

 

 

자바스크립트 파일을 실행하려면 node 명령어 뒤에 파일명을 입력한다. 파일 확장자 .js는 생략할 수 있다.

 

 

VSCode 에서 직접 실행하기 위해서 Code Runner extension 을 설치하면 된다고 해서 설치하고 CTRL + ALT +  N 을 눌러서 실행하면 글자가 깨져보여서 ....

그냥 node.js 에서 실행하기로 했다.

 

VSCode 터미널 창에서 node 파일명.js 를 했더니 잘된다.

 

const a = 1;
if( a + 1 == 2){
    const a = 2;
    console.log('if문 안의 a 값은 ' + a);
}
console.log('if문 밖의 a 값은 ' + a); 

 

블로그 이미지

Link2Me

,
728x90

Eclipse 에서 PHP 개발 테스트를 하기 위해서 PHP Development Tools 를 설치했다.

구글 검색해서 4.1 버전 이미지를 보면서 설치를 했다.




검색어 php 를 입력하고 Go를 누르면 아래와 같이 PHP Development Tools 최신 버전이 나온다.

현재 그림은 이미 Installed 된 것이라 이렇게 보이지만 설치하지 않았으면 Install 이라고 나온다.


이후에 나온 그림은 캡처를 하지 않아서 게재할 수가 없다.

다른 블로그에 나온 이미지를 참조해도 되고 순서대로 진행하면 된다.

설치를 하고 나면 프로그램 재실행을 해준다.


이후에 PHP 파일에서 APM 과 연결하여 PHP 파일을 직접 실행하는 방법이다.


먼저 Preferences 를 눌러서 아래 화면이 나오면 PHP 항목을 선택한 다음에

Servers 를 선택하고 Default PHP Web Server 경로를 수정해줘야 한다.

APM(Apache + PHP + MySQL) 이 설치된 Autoset9 의 설치경로의 web root 경로(httpd.conf 에서 설정한 경로)를 지정해준다.



이제 PHP Project 를 생성할 때 아래와 같이 1번 항목이 보이게 된다.

2번 항목에는 이미 만들어놓은 PHP 경로를 적어주면 된다.


실제 파일에서 아래와 같이 한번만 실행하면 다음부터는 1번만 누르면 마지막 설정한 걸 실행한다.




사족을 달자면...

맥북 2010 프로에는 윈도우10 설치가 안되어 윈도우 8.1 을 설치해서 사용하고 있는데 Aptana 를 설치하면 에러가 발생하면서 설치가 안되어서 Eclipse Java 설치한 것에 PHP 모듈을 추가해 본 것이다.

여러가지 PHP 툴을 설치하지만 딱 마음에 드는게 별로 없다.

Eclipse PDT 를 사용해 보고 장점이 발견되면 추가로 적어둘려고 한다.


블로그 이미지

Link2Me

,
728x90

자바 강좌를 들으면서 실습용으로 Eclipse를 설치해서 사용중인데 기본 인코딩 모드가 UTF-8 이 아니었다.

PHP 모듈을 추가 설치하면서 PHP 파일을 읽어오는데 한글이 깨져 보여서 기본 인코딩 모드를 변경했다.



Visual Studio Code 에서 자바 실습하는 걸 해보려고 했지만 영~~ 아니다.

PHP 코드를 정렬하고자 Visual Studio Code 를 실행해서 해봤지만 확장자가 PHP 인것은 제대로 못하는 가 보다.

그래서 Eclipse 에서 PHP 모듈을 추가 설치했다.

블로그 이미지

Link2Me

,
728x90

Visual Studio Code 는 거의 모든 언어를 지원한다.


Visual Studio Code에서 PHP 코딩에 유용한 Extension 을 설치해봤다.

설치한 extension 은 사용자 폴더 하위폴더에 .vscode 로 만들어져 있더라.

설치한 것이 마음에 안들면 이 폴더를 통째로 날리면 다시 설치할 수 있다. 개별로 지우는 것은 안해봤다.

이것 저것 Extension 을 설치해보니 사용하기에 좀 편해진 거 같다.

EditPlus 를 이용하여 날 코딩하던 걸 이걸로 변경해보면서 기능의 편리함을 체험해보려고 한다.

Local Web 연동처리는 Aptana Studio 도 같이 설치해서 활용하는 것이 좋을 거 같다.


Extension

 설 명

 PHP IntelliSense

 PHP를 위한 고급 자동완성 및 리팩터링을 지원한다.

 "PHP 실행파일이 설정되지 않았기때문에 유효성 검사를 할 수 없습니다."

 File > Preferences > Settings

 "php.validate.executablePath" : "C:/설치한 폴더/php.exe" 로 변경

 ※ php 버전은 7.X 버전이 설치된 폴더를 설정해준다.

 PHP 코드를 타이핑할때마다 문법을 체크해준다.

 PHP Formatter

 phpfmt - PHP formatter 를 설치한다.
 코드 정렬 단축키 : Shift + Alt + F (Windows), Shift + Option + F (MAC)
 HTML 과 혼용되어 있는 것은 정렬해주지 못하더라.

 Format HTML in PHP

 PHP 와 HTML 이 혼용된 파일에서 HTML 영역을 선택하여 마우스 우클릭하여

 코드를 깔끔하게 정렬할 수 있다.

 PHP Intelephense

 문서, 작업 영역, 기본 제공 생성자, 메서드 및 함수에 대한 자세한 서명 도움
 오류 허용 구문 분석기를 통해 열린 파일에 대한 여러 구문 분석 오류 진단

 Auto Close Tag

 HTML 닫기 태그를 자동으로 추가한다.

 Auto Rename Tag

 HTML 태그의 이름을 자동으로 바꾼다.

 ESLint

 자바스크립트 문법검사를 해준다.

 IntelliSense for CSS class names in HTML

 Bootstarp 라이브러리를 통해 개발할때 정말 유용한 플러그인

 작업 공간에 있는 정의를 기반으로 HTML Class 속성에 대한 CSS Class 이름을 자동 완성해 준다.

 jQuery Code Snippets

 

 Beautify

 




블로그 이미지

Link2Me

,
728x90

Visual Studio Code 를 설치해서 PHP Debuging 이 좀 더 편리한지 알아보는 중이다.


1. 한글 Pack 설치

   - 설치하면 메뉴가 한글로 나온다.

  

2. PHP Pack 설치

   https://code.visualstudio.com/docs/languages/php 에 기본 설치해야 할 PHP Extension 정보가 나온다.


3. APM(Apache + PHP + MySQL) 설치

   - 윈도우 기반에서 설치할 수 있는 툴은 autoset9, autoset10, xampp 가 있다.

   - 구글 검색하면 나온다.

   - 테스트를 해보니까 autoset9 은 제대로 지원을 못한다. autoset10 또는 xampp 를 설치하시라.


4. PHP 설치경로 설정

   - VS Code 프로그램에서 파일 - 기본설정 - 설정을 누른다.



php.validate.executablePath 를 추가하고 저장한다.


5. PHP 디버거 설정

    - https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug 에서

    - DEBUG 를 설치한다.

    - 커서를 아래로 내려서 Installation 을 읽고 Download 를 누르면

      https://xdebug.org/download.php 에서 APM 설치한 PHP 버전에 맞는 버전을 다운로드 받는다.



    - 다운로드한 php_xdebug-2.7.2-7.2-vc15-x86_64.dll 파일을 PHP 파일이 설치된 하위 폴더 ext 에 옮긴다.


https://xdebug.org/wizard.php 를 브라우저에서 열고 phpinfo(); 내용을 CTRL + A를 눌러 복사한 다음 붙여넣기를 한다.

지원하지 않는다고 나온다.

      하지만 https://xdebug.org/docs/install#configure-php 에서 보면 오래된 PHP 버전도 지원한다고 나온다.


Autoset10 으로 설정하고 phpinfo() 내용을 CTRL + C로 복사하여 붙여넣기 했더니 아래와 같이 보여준다.


    - php.ini 파일을 열어 아래와같이 수정한다.

[XDebug]

zend_extension="C:/AutoSet10/Server/bin/ext/php_xdebug-2.7.2-7.2-vc15-x86_64.dll"
xdebug.remote_enable = 1
xdebug.remote_autostart = 1


    - 이제 APM(autoset10)을 재시작한다.


6. VS Code를 재시작하여 디버깅을 해본다.

   구글링을 해보니 PHP 코드 로직 테스트 등에는 결과를 알 수 있어 좋을 거 같다.


7. Web 서버와 연동 기능

   - PHP Server를 설치하니까 Web 브라우저로 내용을 보여주기는 한다.

   - Aptana Studio 와 다르게 Local 에 설치된 Web 서버와 직접 연결하여 보여주는 기능이 없는 것인지

     못찾은 것인지 모르겠다..






블로그 이미지

Link2Me

,
728x90

윈도우/맥북에서 동시에 사용할 수 있는 Editor를 찾다보니 Brackets 이 괜찮은 거 같아서 이용을 해보고 있다.


새로운 파일을 생성하고 Shift + Tab 키를 누르니까 HTML5 기본 포멧이 바로 생성된다.

들여쓰기는 보통은 Shift + Tab 키인데, brackets 에서는 Ctrl + [ 키를 누르면 된다.

내어쓰기는 보통은 Tab 인데, brackets 에서는 Ctrl + ] 키를 누르면 된다.

블로그 이미지

Link2Me

,
728x90

http://brackets.io/ 에서 설치 파일을 다운로드 한다.

Adobe에서 제공하는 브라켓은 오픈 소스로 만들어진 텍스트 편집기로 웹 개발에 필요한 기능을 포함하고 있는 웹 개발 도구다.

확장기능을 설치하면 편리하게 사용할 수 있는 text editor 인거 같다.

브라켓 에디터를 설치한 이유는 NodeJS 코드 연습을 위한 목적이다.


일반적인 기능 설명은 https://opentutorials.org/course/2418/13455 생활코딩 사이트의 유투브 강좌에 잘 설명되어 있다.




설치 폴더는 Autoset9 에 설치되도록 변경했다.


프로그램을 실행하여 보기 --> 테마를 선택하여 [테마 설정]에서 아래와 같이 글꼴 크기를 조정한다.


실시간 미리보기를 누르면 크롬브라우저가 자동으로 연동되어 코드를 수정하면 실시간으로 크롬브라우저에서 변경된 사항을 확인할 수 있다.


확장기능 설치 : 파일 -> 확장기능 관리자

- Emmet : 편리한 자동완성 기능

- Custom Work : 파일을 탭 형식으로 보여주기

- Number Tabs

- Brackets Outline List  : 한 파일에 함수들을 한번에 볼 수 있는 플러그인

- NodeJS integration : 브라켓에서 노드 프로그램 실행하기



NodeJS 확장기능을 설치하고 실행하면 이런 에러메시지가 나온다.



파일을 선택하지 않아서 생기는 현상이다.



파일을 선택하고 실행버튼을 누르면 결과가 나온다.


실행할 파일을 제거하는 방법은



파일을 제거 또는 추가해주면 리스트에 보인다.

블로그 이미지

Link2Me

,
728x90

https://www.apachefriends.org/index.html 에서 XAMPP 를 다운로드한다.

설치를 했더니 바로 설치가 안되고 에러가 발생하면서 안된다.


원인은 443 포트를 VMware 사용하고 있어서라고 에러 메시지가 나온다.

AutoSet9 은 강제로 서비스를 OFF 시킨 상태다.

처음 설치하는 PC에서는 이상없이 80, 443 포트가 설치될 것이다.




https://stackoverflow.com/questions/18300377/xampp-apache-error-apache-shutdown-unexpectedly

에 나온 내용을 참조해서 443 포트를 4433으로 변경했다.



좀 더 직관적으로 환경설정 파일을 설정할 수 있도록 되어 있는 점은 상당히 편리한 거 같다.

보통 APM(Apache + PHP + MySQL)을 배울 때 환경설정하는 부분을 잘 모르는 경우가 많은데 이 툴은 이런 부분을 세부적으로 Control 할 수 있게 만든 것은 마음에 든다.


Config 에서 Editor 도 editplus.exe 로 경로를 변경해주었더니 EditPlus 로 연결된다.



httpd.conf 파일 내용을 아래와 같이 수정했다.

기존에 설치했던 경로를 그대로 이용하기 위해서다.


DocumentRoot "C:/AutoSet9/public_html/workspace"
<Directory "C:/AutoSet9/public_html/workspace">
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

#DocumentRoot "C:/xampp/htdocs"
#<Directory "C:/xampp/htdocs">
#    Options FollowSymLinks Includes ExecCGI
#    AllowOverride All
#    Require all granted
#</Directory>



IDE 개발툴은 https://netbeans.org/downloads/ 에서 PHP x64 버전을 다운로드 받는다.



5번에서 workspace 는 지워야 한다. 왜냐하면 default path 가 workspcae 까지 이기 때문이다.




여기까지 하면 툴 사용에 대한 기본 설정은 한 셈이다.

블로그 이미지

Link2Me

,
728x90

EditPlus 는 인터넷에서 구한 소스 및 텍스트를 정리하는데 최고로 편하다.

이런 작업을 할 때 반복적으로 해야 할 경우와 여러번  실행해야 하는 불편을 키 한번만 누르면 자동으로 실행되게 하는 편리한 기능이 장점 중 하나다.


빈줄지우기 와 줄끝 공백지우기를 한꺼번에 처리하는 걸 매크로 단축키로 지정했다.





여기까지 진행하고 나면 Ctrl + Q 를 눌러주면 매크로 녹음기능이 끝난다.

이후부터는 단축키로 지정한 Alt + 2 만 눌러주면 해당 설정한 매크로가 자동으로 실행된다.

블로그 이미지

Link2Me

,
728x90

Aptana 에서 프로젝트(PHP Project)를  생성하고, 화면에 작업하는 모습이다.


왼쪽 1번은 생성한 프로젝트가 표시되고 현재 작업중인 프로젝트는 열린 상태로 보인다.

2번은 <div></div> 가 어디에서 어디까지 영역이 미치는지를 마우스로 찍으면 화면상에 표시를 해주어 편하다.


작업창 화면 색상 표시 부분 설정은

Window --> Preference 에서 여러가지 테마를 설정할 수 있다.

내가 선택한 테마는 Pastels on Dark 이다.




파일이 제대로 동작하는지 AutoSet9 상에서 보고자 한다면

환경설정에서 연결한 Firefox 브라우저 설정에 따라 자동으로 Firefox 웹 창이 뜨면서 보여준다.




블로그 이미지

Link2Me

,
728x90

설치환경

AutoSet9 on Windows10 64bit


설치파일 구하기

https://xdebug.org/download.php  에서 AutoSet9 설치된 버전을 다운로드 한다.


php.ini 환경설정 파일에서 아래 코드를 추가한다.


[xdebug]
zend_extension = "C:\AutoSet9\server\bin\ext\php_xdebug-2.5.0-5.6-vc11-nts-x86_64.dll"
;zend_extension = "C:\AutoSet9\server\bin\ext\php_xdebug-2.5.0-5.6-vc11-nts.dll"


zend_extension 의 윗줄은 64bit 용으로, 아래 줄은 32bit 용으로 받은 거다.

윗줄로 설정을 했을 때는 에러없이 동작한다.


phpstorm과 xdebug 연동하기 URL http://codeigniter-kr.org/bbs/view/tip?idx=8346 에 예시가 잘 나와있다.

breaking point 지정해서 하는 걸 코드를 하나 선택해서 동작 여부를 테스트해봐야겠다.


https://opentutorials.org/course/692/3758 동영상도 보면서 파악을 해봐야겠다.

블로그 이미지

Link2Me

,
728x90

Aptana Studio 3 에서 선택한 파일을 실행하는 테스트를 하려고 한다.

외부 서버 설정 등을 해서 해당 파일을 찾아서 실행하는 것이 생각보다 쉽지 않다.




위와 같이 설정을 하고 파일을 선택해서 실행하니까 해당 파일이 실행이 바로 바로 된다.

EditPlus 로 코딩을 하는 것은 에러가 날 확률도 높은데다가 매번 파일명을 일일이 지정하는게 너무 너무 귀찮아서 이런 편리한 방법을 좀 찾고 있었다.



위 화면처럼 파일 선택하고 실행하면 바로 해당 파일이 Firefox 브라우저에서 실행되어 결과를 보여준다.


http://localhost/workspace 로 경로를 지정한 이유는 이미 http://localhost 디렉토리 하단에 여러 디렉토리를 만들어서 테스트를 하던 상태라서 Aptana Studio 3 에서 workspace 경로를 localhost 경로로 지정했더니 에러가 발생해서다.

하지만 처음부터 Aptana Studio 3를 설치하고 테스트를 했다면 이런 문제는 없었을 것이다.



http://localhost/workspace 를 바로 http://localhost 로 만드는 방법은

http.conf 환경설정에서 경로를 변경하면 된다.

DocumentRoot "C:/AutoSet9/public_html"
<Directory "C:/AutoSet9/public_html">
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

를 찾아서

DocumentRoot "C:/AutoSet9/public_html/workspace"
<Directory "C:/AutoSet9/public_html/workspace">
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
로 변경하고 Apache를 재시작하면 홈디렉토리 경로는 변경된다.


이렇게 변경하면 다시 Run Configuration 을 다시 설정해줘야 한다.


이렇게 변경해주면 문제없이 동작된다.


블로그 이미지

Link2Me

,
728x90

PHP 코드를 입력하고 제대로 동작하는지 테스트를 해보자.


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script>
    window.open("http://google.co.kr");
</script>
</head>   
<body>
   
</body>
</html>


이 코드는 PHP는 한줄도 없다. 네이버지식인에 올라온 질문을 보고서 그대로 연습해서 작성한 코드다.

코드 자동완성 기능 연습을 했다.


이 코드를 웹서버에서 제대로 실행되는지 테스트 해보자.


Run As 를 한번만 하고 나면 다음부터는 버튼만 누르면 이 파일이 실행된다.


테스트를 하고 보니 eclipse 에서 Android 폰 개발할 때와 같은 개념으로 동작한다.

단지 환경만 Web Server 환경으로 변경되었다는 것만 다르다.


연습으로 실행을 한 것이라서 ex-01.php 파일로 생성했지만

실제로는 디렉토리 단위로 프로젝트를 생성한다고 가정해야 하므로

index.php 파일이 있어야 하고 연관된 파일들을 생성해서 코드를 작성해야 한다.


그런 환경이라고 가정하면...



처럼 생성해야 맞다.


PHP Web Page 에 프로젝트 단위로 계속 추가되고, 프로젝트 단위로 inital Script 를 설정하면 된다.


블로그 이미지

Link2Me

,
728x90

Aptan Studio 3 기본 설치와 workspace 경로를 변경했다.

이제 본격적으로 PHP Project 를  생성해보려고 한다.


프로젝트 그룹 생성



생성된 그룹에 파일 추가




PHP Interpreters 설정



내장된 Web 서버 설정



Web Server 를 설정해보자.



Base URL : 마지막에 / 는 절대 붙이지 말라. 테스트 해보니 붙이면 안된다.



Aptana 라는 이름으로는 workspace 경로까지 포함해서 추가했다.




화면 글꼴 변경

화면 글꼴이 너무 작아보여서 16으로 수정했다.



PHP Server 환경 설정




기본적인 환경설정은 끝났다.


블로그 이미지

Link2Me

,
728x90

Aptana 를 설치하고 나서 보니 AutoSet9 Document Root 디렉토리 밖에 있다보니 테스트를 하는데 애로사항이 계속 발생한다.

그래서 Workspace를 변경했다.




httpd.conf 파일에 설정된

DocumentRoot "C:/AutoSet9/public_html"

하위 디렉토리에 workspace를 변경했다.


다음에는 실제 PHP Project 를 생성하고 환경설정하는 법에 대해 기술하련다.


블로그 이미지

Link2Me

,
728x90

윈도우버전 Aptana Studio 3.6.1 에서는 아래 과정은 시도하지 않아도 된다는 걸 확인했다.


aptana eclipse plugin installation

http://www.aptana.com/products/studio3/success_plugin.html 에서

http://download.aptana.com/studio3/plugin/install 를 복사(Ctrl + C) 한다.



최신버전이 설치되었다고 나오면서 설치가 안된다.

유투브 동영상 보면서 이런 과정으로 설치된다는 걸 확인해봤다.

블로그 이미지

Link2Me

,
728x90

생활코딩 사이트 동영상 강좌를 보다가 Aptana 를 알게되어 설치를 시도했다.

Aptana Studio 3 를 알고 있을 때와 모르고 있을 때의 차이점은

Aptana Studio 3 를 알면 파워풀한 기능, 편리한 기능으로 코딩하기가 정말 쉬워진다.


http://www.aptana.com/products/studio3/download.html

에서 윈도우버전 3.6.1을 받아서 설치를 했다. (경고성 메시지 떠서 강제로 실행했음, 2019.8.27)

https://github.com/aptana/studio3/releases 에 최신 버전이 올라와 있다.


위 사이트에 가면 최신버전이 나온다.


알아야 할 사항

JDK 파일은 반드시 32비트 버전 8버전대를 받아야 한다.

64비트 용으로 받았다가 지우고 다시 32비트 버전으로 설정을 했다.



에러가 발생하면서 설치가 중단된다.

nodejs 파일을 설치해주면 된다고 해서 받아서 설치해도 안된다.

검색했더니 아래 파일을 설치해주라고 되어 있어서 받아서 설치를 했더니 설치도중에 나오는 에러메시지는 없어지고 잘 설치가 되었다.


node-v0.10.13-x86.msi


http://go.appcelerator.com/installer_git_windows.exe 파일을 받아서 설치하라고 구글 검색하면 나온다.


Aptana 프로그램을 실행했더니 또 에러가 나면서 실행이 안된다.

Failed to load the JNI shared library "C:\Program Files......\jvm.dll"

Aptana 3.6.1 이 기본적으로 x86 으로 설치가 되는거 같다.

eclipse 는 64비트로 잘 동작되는데도 불구하고 설치를 하면 에러가 발생한다.


http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html



받아서 설치하니까 자동으로 인식된다.

위 사이트에서 받지 않고 첨부한 이 파일을 받아서 설치해도 된다.


jre-8u111-windows-i586-iftw.exe



Aptana 도 eclipse 처럼 workspace 경로를 잡아주어야 한다.

그리고 AutoSet9 과 연동하여 Apache 환경설정 경로를 잡아주어야 제대로 사용하는 거다.

- 프로젝트 단위로  생성하여 관리한다. (eclipse 기능하고 동일한 개념)

- 파일에서 내용 검색이 쉽다.

- 코드를 입력하면 자동으로 검색되는 키워드를 보여줘 무척 편하다.

- 코드를 만들어 테스트할 때, Firefox 등 웹브라우저로 바로 연결되어 결과를 확인할 수 있어 편하다.



EditPlus

- Total Commander 에서 파일을 선택하면 자동으로 EditPlus 창이 뜨므로 코드 수정이 편하다.
-
리눅스 APM에 코드를 올려야 한다면 WinSCP 를 이용하면 편하다.
-
EditPlus 매크로 기능을 사용하면 단순작업이 편하다.

- 인터넷에 있는 코드를 복사해서 붙여넣기 한다음 간단하게 수정하기가 편하다.

블로그 이미지

Link2Me

,
728x90

PHP 보안은 PHP 버전에 따른 보안과 Web Application 보안으로 나눌 수 있다.

PHP 5.4 에서는 HTTP header injection 취약점을 개선시켰다.

높은 버전의 PHP 를 사용하는 것이 바람직하지만, 이전버전과의 호환성에 문제가 있을 수 있으므로 Web application 코드를 충분히 테스트하는 것이 좋다.

 

PHP는 사용자의 입력 실수(문자형, 숫자형)를 자동으로 형변환해주는 기능이 있다. 이 기능을 잘못 사용하면 보안에 취약해질 수 있다. 문자열을 비교하고 싶으면 일치 연산자(===)로 비교하거나, 반드시 strcmp()함수를 사용해야 한다.

 

 

PHP 환경설정 파일 중에서 간단하게 정리해둔다.

 

disable_functions = phpinfo()
; phpinfo() 함수는 시스템내의 php,http,mysql 과 관련한 모든 정보를 보여주므로 운용시 막는 것이 좋다.

 

error_reporting  =  E_ALL

; 해킹의 먹이감이 되므로 평소에는 Off 로 해둔다. 에러가 있을 경우 디버깅 가능하도록 에러 메세지를 출력해준다.
display_errors = Off
; 평소에는 해제(Off)한다. 개발환경에서는 디버깅 가능하도록 On하면 에러 메세지를 출력해준다.
display_startup_errors = Off

 

;default 8M 로 되어 있음, upload_max_filesize 보다 크게 설정해야 함

post_max_size = 20M

memory_limit = 128M
upload_max_filesize = 18M

 

allow_url_fopen = Off

; On 인 경우 외부의 URL 을 로컬 파일과 똑같이 취급할 수 있다.

;해당 옵션을 On으로 설정하면 파일 액세스 시 외부 사이트의 파일을 호출할 수 있다.
;특히 include(), require()계열의 함수 사용 시 심각한 보안상의 문제를 유발하게 되므로 반드시 Off로 사용한다.
; PHP injection 공격 방지 목적으로 off 로 설정

; PHP 5.2 이후부터는 allow_url_include = off 로 설정이 분리되었다.

 

date.timezone ="Asia/Seoul"

session.save_path = "/path/to your folder"

; 세션파일을 저장할 폴더를 지정한다.

; UNIX OS에서 기본값은 /tmp 이므로 공유 서버의 경우 다른 사용자가 세션 정보를 읽거나

; 세션 하이젝을 할 수 있으므로 Application 별로 다른 사용자가 액세스할 수 없는 비공개 폴더를 지정하는 것이 좋다.

;session.save_path = /tmp/session 디렉토리를
;chown nobody.nobody /tmp/session
;chmod 750 /tmp/session 이렇게 해주면 된다.

expose_php = Off
;웹서버 헤더에서 PHP 버전 정보 숨기기

session.use_only_cookies = 1
;세션에 대해 쿠키를 사용하고, GET 파라미터로서 세션 ID가 패싱되는 걸 허용하지 않는다.

 

;session.cookie_secure = 1
;SSL 인증서를 설치하고 https 만 사용하는 것이 평문으로 세션 ID가 전송되는 걸 막을 수 있으며, 세션 공격을 더욱 어렵게 만든다.

 

session.cookie_httponly = 1
; 1로 설정하면, 자바스크립트 같은 클라이언트 사이드 스크립트에 노출되지 않게 된다.

session.use_trans_sid = 0
; 세션이 URL이나 Form 의 INPUT으로 의도하지 않게 PHPSESSIONID 가 전송될 경우 방지.  1 설정은 전송됨

기본 설정값

session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440 // 움직임이 없을 경우 세션 유지 시간, default 24분

세션을 10분 동안 유지하기
session.gc_probability = 1
session.gc_divisor = 1
;이값이 100이면 1/100 즉 1%의 확률로 가비지콜렉션이 실행된다.

session.gc_maxlifetime = 600

;사용자가 아무짓 안할 경우 600초 즉 10분 후에 가비지로 보이는 것을 삭제한다.

;지정된 session.save_path 폴더 아래로 가서 변경이 없는 파일을 찾아 지운다.

 

; 보안상 0 으로 놓은 것이 좋다고는 하는데, 세션은 생성되는데 다른 파일에서는 인식이 안된다.
session.auto_start = 1

PHP 설정에서 에러 표시가 Disable 되어 표시 되지 않을때 특정 페이지에서만 에러를 볼 수 있는 방법이다.
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL);

 

=========================================================

session_start();
if($_SESSION['authID']!=1){
    echo "<script>window.top.location.replace('/index.php');</script>";
    exit;
}
를 해주는데 세션이 먹지 않는다.

삽질을 열심히 하면서 알아낸 것은 PHP 파일 인코딩 모드가 UTF8 이면 정상인데 UTF8+BOM 으로 하면 에러가 발생한다.

세션의 경우에도 characterset 을 맞춰줘야 정상동작한다.

 

echo 로 찍어보면 해당 파일에서 분명히 세션이 생성된다.

echo (isset($_SESSION['userID']) ? $_SESSION['userID'] : "Visitor");

그런데 다른 파일에서 세션 정보 유지가 안된다.

환경설정에 가서
session.auto_start = 1

로 변경하고 나서야 세션 정보가 유지되었다.

 

 

참고 : 세션관련 참조하면 도움될 게시글

http://www.serverguide.co.kr/82

 

세션과 보안 : https://link2me.tistory.com/647 참조

블로그 이미지

Link2Me

,
728x90

PHP 파일 업로그 관련 함수와 예제를 간단하게 작성해봤다.


리눅스에서 APM(Apache, PHP, MySQL) 소스 설치를 여러번 연습하다보니 php.ini 환경설정 변수 설정이 중요하다는 걸 알게 되었다.

파일 업로드를 위해서 php.ini 설정을 수정해줘야 한다.

기본 설치를 하면 파일 업로드 용량이 작게 설정되어 있다.

file_uploads = on  // PHP 를 사용해서 파일 업로드를 허용할 것인지를 결정하는 항목

upload_tmp_dir=  // 이 항목에 값을 지정하지 않으면 시스템이 사용하는 임시 디렉토리를 사용하게 됨

upload_max_filesize = 50M   // 업로드되는 파일의 최대 크기를 지정하는 항목

post_max_size = 60M  // 파일은 POST 방식으로 서버에 전달. upload_max_filesize 보다 반드시 커야 한다.



bool is_uploaded_file(filename) 함수는 파일 업로드 양식을 통해 파일이 POST 방식으로 업로드되었는지 여부를 조사하는 함수이다.

is_uploaded_file() 함수의 인자는 실제 파일 이름이 아니라 임시 디렉토리에 존재하는 임시 파일 이름이다.


bool move_uploaded_file(임시파일명, 실제파일명);

임시 디렉토리에 업로드된 파일을 새로운 디렉토리로 이동시킨다.

먼저 임시 디렉토리를 조사하여,

- 업로드된 파일이 존재하지 않으면 False를 반환한다.

- 파일은 존재하지만 지정된 위치로의 이동이 실패하면 False를 반환한다.


bool file_exists(realname);

파일명(realname)이 존재하는지 조사하여 존재하면 True, 없으면 False 를 반환한다.

이 함수는 파일을 업로드할 때 서버에 동일한 이름의 파일이 존재하는지 조사하기 위해 주로 사용한다.

filename 은 파일명 자체를 의미하지 않고, 실제 업로드할 파일 경로 + 파일명을 의미한다.

$filepath_name = "../files" . "/" . $realname;

if( file_exists($filepath_name)) {

    echo '동일한 이름을 가진 파일이 존재합니다';

    exit;

}


스크립트 언어는 실행엔진만 서버에 적재되어 있다면 언제든 실행이 가능하다.

보안을 위협할 수 있는 코드가 삽입된 스크립트 문서나 실행 가능한 파일이 업로드 되지 않도록 해야 시스템의 보안 문제를 방지할 수 있다.


========= Form 데이터 파일 =================

// PHP 에서 파일을 업로드 하는 경우 업로드되는 파일은 반드시 POST 방식으로 전달되어야 한다.

// 파일을 첨부하기 위해서는 <form> 태그에 enctype 속성의 값으로 "multipart/form-data"를 지정해야 한다.
<form name="procForm" method=POST action="addresswrite.php" enctype="multipart/form-data" onsubmit="return saveCheck(this);">
    <input type=file name="excel" size=30 /><br /><br />
    <input type=submit value="전송" />
</form>

<script type="text/javascript">
//<![CDATA[
function saveCheck(f)
{
    if (f.excel.value == '')
    {
        alert('CSV 파일을 선택해 주세요.');
        f.excel.focus();
        return false;
    }
}
//]]>
</script>

========== addresswrite.php =====================
<?php
// POST 방식으로 전달받은 파일을 검사하여 업로드 및 파일 read 하여 DB에 데이터 저장 처리
$tmpname    = $_FILES['excel']['tmp_name'];  // 임시파일명

if (is_uploaded_file($tmpname))  // 임시파일이 디렉토리에 존재하는 경우
{

    $realname    = $_FILES['excel']['name'];  // 실제 파일명
    $filesize    = $_FILES['excel']['size']; // 파일 크기
    $filetype    = $_FILES['excel']['type']; // 파일 형태
    $fileExt    = strtolower(getExt($realname));  // 파일 확장자 구하는 함수

    $saveFile    = $g['dir_module'].'files/csv/'.$csvfile;

    if (!strstr('[csv][xlsx]',$fileExt))   // 업로드 가능 확장자 조사
    {
        getLink('','','csv, xlsx 파일만 등록할 수 있습니다.','');
    }

    // 동일한 이름을 가진 파일이 존재하는 지 검사, unlink 하여 파일을 지우지 않을 경우

    // if(file_exists($saveFile))
    move_uploaded_file($tmpname,$saveFile);  // 임시 디렉토리에 있던 파일을 실제 파일의 이름으로 전송

    @chmod($saveFile,0606);  // 리눅스에서 파일 권한 변경
}

// 파일을 업로드한 후 파일을 연다
$file=fopen($saveFile,"r");
if(!$file){
    echo("Failed to open the file");
    exit;
}

while($line = fgetcsv($file,1000, ";")) { // 구분자는 ; 로 지정, 한줄씩 읽어드린 값을 마지막행까지 계속하라.
    $line0    = iconv("euc-kr", "utf-8", $line[0]); // 파일의 인코딩 모드가 ANSI 일 경우 UTF8 로 변경처리
    $line1    = iconv("euc-kr", "utf-8", $line[1]);
    // 구분자로 분리해서 읽어들인 항목을 DB의 칼럼에 대입하여
    // 신규 등록 또는 기존 자료 중복체크 등을 수행한다.
}
fclose ($file);   // 성공하면 1을 반환하고 실패하면 0을 반환
unlink($saveFile);  // 업로드한 실제 파일 삭제
// 등록건수 및 중복건수 팝업창 보여주기
?>

블로그 이미지

Link2Me

,