Skip to main content

윈도우 mongoose에 php7 사용해보기

정말 간단하게 윈도우 로컬에서 PHP로 해야할 작업이 있어서 찾아보았습니다.

usbwebserver를 쓸려고 했는데 크기가 더 작은 녀석이 있네요…

mongoose 웹서버 입니다.

물론 .. 나름 구동방식에 있어서 장단점은 있지만 로컬에서 혼자 개발하는 용도로는 최적인 것 같습니다.

다운로드 링크는 다음주소에 있습니다.

https://code.google.com/archive/p/mongoose/

5.0이 최신이긴하지만… php가 잘 작동하지 않습니다.

mongoose_download

4.1 버전을 다운로드 합니다. 물론 이 속에 들어있는 PHP 버전은 5.x 입니다.

압축을 풀어보면 다음과 같은 파일이 있습니다. web_root 에 php프로그램을 저장합니다.
moongoose_files
mongoose.exe를 실행하면 윈도우 트레이에 아이콘이 뜨고 localhost:8080으로 브라우저로 접속해 볼수 있습니다.
그대로 써도 상관은 없지만 php의 extension이 다 빠진 상태라 난감합니다. ㅋㅋ -ㅅ-) sqlite3 정도 되는 수준….

이제 mongoose를 쓸만하게 만들어 볼겁니다.

1. http://www.php.net에가서 php7 윈도우 버전 바이너리를 받아옵니다. 받아온 파일은 mongoose하위폴더에 php7으로 위치 시킵니다.
php5ts.dll과 php-cgi.exe는 php5 버전임으로 삭제 합니다.
대략 폴더/파일이 다음과 같은 모양이 됩니다.
mongoose_files2

2. mongoose.conf 파일을 편집합니다. (html도 추가해주고 php-cgi.exe 경로도 넣어주고 …. )
내장된 설정창에서도 변경이 가능하지만 절대경로로 들어가버려서 폴더 위치를 옴기면 설정이 변경되어 버립니다.
(다음과 같이 상대경로로 잡아두면 cd, usb등에 넣어다닐때 편리합니다.)

cgi_pattern **.cgi$|**.pl$|**.php$|**.html$
cgi_interpreter php7/php-cgi.exe
listening_ports 8080,8081s
document_root web_root
ssl_certificate ssl_cert.pem
url_rewrite_patterns /xy=web_root\index.php

3. php.ini 파일을 생성합니다. 물론 mongoose 폴더에 같이 둡니다. 간단하게 필요한 extenstion 들만 추가해서 간단하게 만듭니다.
이것저것 필요한 설정들을 넣어주도록 합니다. 이 내용은 php7 폴더에 있는 php.ini-dest 등을 참고해주세요.

date.timezone = "Asia/Seoul"

extension_dir = "./ext"
extension=php_gd2.dll

그러면 최종적으로 파일들은 이렇게 됩니다.
mongoose_files3

4. 해도되고 안해도 되는 php파일정리
이렇게 해주면 용량이 매우 줄어듭니다. -ㅅ-)
mongoose_files4

mongoose-php7

이렇게 해서 외장하드에서 관리하는 포토겔러리를 만들었습니다.
자세한 소스는 다음에 ….. -ㅁ-)
아직 정리가 되지 않음….

Ubuntu16에서 apache2,php7 설치하기

Ubuntu16에서 apache2,php7 설치하기

우분투 서버는 처음 써봤습니다. -ㅅ-);;

제가 설치했던 방법을 기록해 봅니다. 클라우드 서버를 개설하더라도 하드웨어 준비는 하지 않겠지만

설치는 해야하지 않겠습니까 -ㅅ-)!!!

Ubuntu 16 – server가 먼저 설치되어있다는 가정하에 시작합니다.

지금까지 사용했던 centos나 amazone linux에서는 yum을 사용했었으나

ubuntu에서는 apt-get을 사용합니다. ubuntu를 사용하다보니 적응 안되는 부분도 조금씩 있긴 합니다만…

(관리자 권한을 위해 sudo를 쓴다든지…. )

1. root 권한으로 실행
Ubuntu는 로그인하면 사용자로 로그인 되기 때문에 관리자 권한을 얻어야지만 설치 명령을 실행할 수 있습니다.
다음 커멘드를 입력 후 로그인 중인 계정의 비밀번호를 입력하면 root를 사용하 실 수 있습니다.

# sudo su - 

2. 서버 업데이트
다음 명령을 통해 패키지 리스트를 갱신합니다. 현재 배포중인 최신버전의 패키지들을 설치할 수 있습니다.

# apt-get update

그리고 그 최신버전 패키지들에 맞게 설치된 패키지들을 버전업합니다.

# apt-get upgrade

3. Apache2 설치
yum 과 비슷하게 다음과 같은 명령으로 간단하게 설치됩니다.

# apt-get install apache2 

4. Apache2 모듈 설정 on/off
Apache2 모듈 설정을 합니다. 필요한 모듈은 추가해주고 필요없는 모듈은 제거합니다.

모듈의 활성화

# a2enmod rewrite headers

모듈의 비활성화

# a2dismod -f autoindex

apache2 설정은 /etc/apache2에서 하게 되는데 위의 명령을 통해서 conf-availble 폴더에서 conf-enable 폴더로
링크가 걸리는것 같습니다. (mod도 마찬가지)

5. PHP7 설치
Ubuntu 16부터는 패키지에 기본적으로 PHP7이 적용되어있습니다.
PHP5를 설치할 수도 있겠지만… 장기적으로 볼때 PHP업그레이드를 통해 지원 받을 수 있는 기간이 PHP7이 최신버전이니 더 길겠죠…
아직도 php.net에 가보면 버그픽스들이 올라옵니다.

다음 명령을 통해 PHP7.0.x 를 설치합니다.

# apt-get install php

그리고 추가적으로 필요한 모듈을을 설치합니다.

# apt-get install php-mysql php-xmlrpc php-xml php-curl php-gd php-pear

설치가능한 모듈 리스트는 다음 명령으로 확인 가능합니다.

# apt-cache search php-

리스트중 필요한 기능들을 설치하실 수 있습니다.

6. Apache2 – PHP7 연동 모듈을 설치합니다.

# apt-get install libapache2-mod-php7.0

7. 서버 시작
서버를 시작합니다.

# service apache2 start

/var/html 폴더에 phpinfo.php 파일을 만들고 http://호스트/phpinfo.php 를 브라우저로 호출해봅니다.
php7-0-8

일단은 여기까지 정도면 클라우드 서버에 사용하기에 적합할 것입니다. -ㅅ-)b
(DB는 별도서버로 PaaS방식으로 사용하는게 안정적이라… )

기타. VirtualHost 구성방법 – http://webdir.tistory.com/213

여담) 그동안 설치를 안해봐서 그런지 …. -_-; 뭔가 생소해졌다.

예고) 다음번에는 조만간 클라우드 서버에서 서버 세션공유 관련된 글을 게시해보겠습니다. ㄷㄷㄷ

requireJS 사용해보기

요즘은 웹사이트에서 자바스크립트의 비중이 커져서 로딩시간이 길어진다든지, 저사양PC에서 웹사이트 실행속도가 늦다든지 하는 문제가 발생하는경우가 많습니다.

뭐 단적인 예로 회사(제가 다니는..)에서 운영하는 홈페이지의 서버가 외국에 있고, 수십가지 라이브러리를 웹페이지에 로드해야할 경우 JS가 동적으로 로딩 될수 있도록 고려해보는 것도 좋지 않을까요….

동적으로 JS파일을 모듈형식으로 로드할수 있는데 이것을 AMD 방식이라고 하는것 같습니다.

자세한 내용은 다음 링크를 보시면 도움 될 것입니다.

https://github.com/amdjs/amdjs-api/blob/master/AMD.md

그래서 찾아보던 도중 requireJS라는 녀석이 이 기능을 하고 웹페이지 node.js 등에서 많이 사용 된다고 해서 사용해보기로 했습니다.

requireJS의 기능은 동적로딩, 의존성 적용, 템플릿로드 … 정도 인것 같습니다.

공식사이트 : http://requirejs.org/docs/start.html

requireJS를 실제로 적용하기위해서 디럭토리 구조가 중요합니다.

다음은  실제로 사용하는 폴더 입니다.  -ㅅ-);;

requirejs_folder

여기서 중요하게 보실 것이 common.js 파일과 lib 폴더 입니다.

common.js는 웹페이지에서 사용할 스크립트들을 정의하는 역할을 합니다. (그리고 의존성도 관리합니다.)

lib폴더에는 jquery, undercore 등 JS라이브러리들입니다. (흔히들 많이 사용하는…)

 

구동 테스트를 위한 샘플에서는 위와 같은 폴더구조를 만들고 common.js 파일을 다음과 같이 작성하였습니다.

requirejs.config({
	baseUrl: 'js',  //js폴더 
	//스크립트 정의
	paths: {
		underscore : "lib/underscore",
		jquery : "lib/jquery"
	},
	//의존성정의
	shim: {
		underscore: {
			exports: '_'
		},
		jquery : {
			exports: '$'
		}
	}
});

baseUrl은 javascript가 저장될 폴더 path에는 사용할 자바스크립트를 모두 적어줍니다.
(모드 안적어도 상관은 없지만 js폴더(baseUrl) 기준으로 로드 되게 됩니다. 가능하면 적어두고 로드 하는것이 실제로 사용할 때 편리합니다. )
shim에서는 의존성을 정의( [‘패키지’,’패키지’] 이런식으로 정의 ) 할수 있고 export를 통해서 jquery객체를 $으로 사용할수있게 합니다.
(paths에서 정의해두면 버전이 다른 jquery를 사용할수도 있습니다.)

그리고 이제 HTML페이지에서 requriejs를 호출해 봅시다.



    
        requirejs TEST
        
		
		
        
    
    
		require js 테스트 테스트 테스트 테스트
    

라이브러리를 로드하고나서 data-main=”js/common”를 통해서 config를 로드할수 있다고 하던데 실제로 해보니 작동하지 않아
별도로 다시 로드 시켜 보았습니다.

이 게시글 처음에 언급한 AMD방식으로 JS를 로드하는 방식과 유사하게 로드합니다.
requriejs에서 로드할 lib들의 이름을 지정하고(config기준) 그속에 JS를 코딩하게 됩니다.
물론 requriejs속에서는 $든, _를 사용할 수 있씁니다만, 밖에서는 사용할 수 없습니다. 그리고 속에서 선언된 함수선언
function을 HTML에서 onclick, onsubmit등으로 직접 호출 할 수 없음으로 $(객체).on(“click”,function(){}); 과 같이 사용해야 합니다.

위의 구동 예제로 구현된 샘플입니다.

http://jusun.org/example/requirejs/

실제로 사용하는 common.js 파일입니다. ^^ 의존성관리, 초기화가 필요한 스크립트의 처리 등을 확인해보세요.


/**
 * Created by jusun on 2016-08-04.
 */
requirejs.config({
    baseUrl: '/js',
    paths: {
        underscore : "lib/underscore",
        jquery : "lib/jquery-1.12.4.min",
        jqueryui : "lib/jquery-ui.min",
        post : "lib/tr.post",
        ckeditor : "lib/ckeditor/ckeditor",


        mathjax : "//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML",
        google : "//apis.google.com/js/client:plusone.js",


        design : "kor/design",
        korcommon : "kor/kor.common",
        sns : "kor/sns",
        snsdev : "kor/sns.dev"
    },
    shim: {
        underscore: {
            exports: '_'
        },
        jquery : {
            exports: '$'
        },
        post : ['jquery'],
        korcommon:['jquery','jqueryui'],
        design:['jquery','jqueryui'],
        mathjax: {
            exports: "MathJax",
            init: function () {
                MathJax.Hub.Config({
                    showProcessingMessages: false,
                    messageStyle: "none",
                    config: ["MMLorHTML.js"],
                    jax: ["input/TeX","output/HTML-CSS","output/SVG"],
                    extensions: ["tex2jax.js"],
                    TeX: {
                        extensions: ["AMSmath.js","AMSsymbols.js","noErrors.js","noUndefined.js"]
                    },
                    tex2jax: {
                        inlineMath: [ ['\\(','\\)'] ],
                        displayMath: [ ["\\[","\\]"] ],
                        processEscapes: true
                    },
                    SVG:{
                        scale: 96
                    },
                    "HTML-CSS": { availableFonts: ["STIX","TeX"] }
                });
                MathJax.Hub.Startup.onload();
                return MathJax;
            }
        }
    }
});

(오늘은 정말 여기까지.. ㅋㅋ )

폼요소 Button에 관하여…

폼요소 Button은 submit 속성을 가지고 있습니다.

그러다보니 그냥 화면 퍼블리싱을 받아서 작업할 때 태그를 바꿀수도 없고 난감한 경우가 있습니다.

스크립트 먹이기도 힘들고 ..
(물론

로도 가능합니다만…
자바스크립트로 이벤트를 사용할 때는 submit이 onclick보다 먼저 실행되어 난감할때가 있습니다 viagra 100 mg pfizer prix. ㅋㅋ
(오늘 당해보고 -_-; 잘 돌아갈줄 알았는데 아니라서…. 포스트를… )

다음과 같이 type=”button” 속성으로 submit 속성을 없엘수 있습니다.

  <button name="btn_allow" type="button">버튼</button>

requirejs등과 같이 스크립트 부분을 분리해서 사용할 때 참고하면 유용할듯 합니다.

(끝..)

PHP에서 한글 정규식사용하기

PHP에서 한글 정규식을 사용해봅시다.

원래는 2바이트 특수문자 차단을 위해서 시작하였으나 -_-; 특수문자의 유니코드 범위가 들숙날쑥이라 범위를
지정할 수가 없었습니다. ㄷㄷㄷ

$pattern = '/[#&*@§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕]/u';

삽질의 흔적….
이렇게하면 한도 끝도 없이 모든걸 다 정규식에 넣어줘야 하는 상황이 발생하니 정규식은 의미가 없게 되겠죠…

…. 삽질 중략 …..

특수문자를 검출 할 수 없다면, 한글,영문, 키보드의 기본문자 등을 검출하여 남는 녀석이 2바이트 특수문자가 되겠구나 라는 아이디어를 이베이프(evape.kr)님께서 아이디어를 주셨습니다. ㅎㅎ (역시 개발자이심)

그리고 열심히 구글을 검색하던 도중 정규식에서도 \x{코드}를 통해서 유니코드를 사용할 수 있다는 것을 알았습니다. ㅋㅋ

무조건 만드는게 아니라 이해를 하고 만들어야해서 다음 페이지에서 많은 도움을 받았습니다. -ㅅ-) 감사..
http://d2.naver.com/helloworld/76650
(한글 코드 범위에 대해서 많은 참조가되었습니다. ^^)

요즘은 정리가 잘되어있어서 찾아도 잘 나오니….

아무튼.. 다음과 같은 결론에 도달하였습니다.

<?
$pattern = '/[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}a-zA-Z0-9~`!@#$%^&*()+\-.:;,_<>?\[\]\{\}\/"\' ]+/u';
$tmp_subject = preg_replace($pattern, "", $subject,-1);
echo $tmp_subject;
?>

$tmp_subject에 걸러지는 녀석이 있으면 2바이트 특문이 되게 됩니다.

테스트 URL : http://jusun.org/example/preg/preg2.php

테스트는 해보지 않았지만 아마 JavaScript에서도 별탈없이 잘 돌아갈것같네요..

오늘도 여기까지…. -ㅅ-)