윈도우에서 Apache + PHP + Oracle 연동하기

1. HTTP 설치

http://www.apachelounge.com/download/

32/64비트에 맞춰서 다운로드하고

위 페이지 중간 쯤에 있는 Visual Studio 관련 링크 화일을 다운로드 및 설치 합니다.

https://www.microsoft.com/en-us/download/details.aspx?id=49984

Visual Studio 관련화일은 다운로드 받아서 실행하면 그대로 윈도우에 설치가 되며,

아파치 화일은 다운로드 후 압축을 풀어 적당한 위치에 옮겨둡니다.

저는 C:\Apache24 로 지정하였습니다.

고급설정 환경변수에서 시스템 환경변수 중 PATH 에 C:\Apache24\bin 을 추가해주고,

커맨드 창에서

– 서비스 등록

> httpd -k install

– 서비스 실행

> httpd -k start

한 후 브라우저에서 localhost 라고 치면 홈페이지가 나오는 것을 확인하실 수 있습니다.

참고로

– 서비스 종료

> httpd -k stop

– 서비스 제거

> httpd -k uninstall

2. PHP 설치

http://windows.php.net/download/

Thread 버전 다운받기

마찬가지로 다운로드 받은 화일 압축을 풀어준 후 적당한 곳에 옮겨둡니다.

저는 여러 폴더 만들기가 귀찮아서

C:\Apache24\php56

이라고 만들어 옮겨 두었습니다.

php 폴더 내에 있는 php.ini-production 화일을 php.ini로 바꿔서 Windows 폴더에 옮겨 줍니다.

이 후 아래 부분들을 수정해 줍니다.

display_errors = On

extension_dir = “C:\Apache24\php56\ext”

date.timezone = Asia/Seoul

extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

또한 httpd.conf 도 수정합니다.

LoadModule php5_module “c:/Apache24/php56/php5apache2_4.dll”
AddHandler application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir “C:/Windows”

<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

이 후 아파치 재시작해서 php가 제대로 작동하는지 확인 바랍니다.

3. Oracle InstantClient

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

오라클 instant Client basic 과 SQL*Plus 화일을 다운로드 받아서 압축을 푼 후

같은 폴더에 몰아 둡니다.

역시 귀찮은 관계로 C:\Apache24\instantclient_12_1 이라는 곳에 몰아 넣었습니다.

그 다음으로 여기 폴더에 있는 화일 중 “o”로 시작하는 dll 화일들을 저는 귀찮아서 모두를

C:\Apache24\bin 폴더에 몰아 넣습니다.

이 후 고급설정 환경변수에서 시스템 환경변수 중

PATH 에 C:\Apache24\instantclient_12_1

ORACLE_HOME 에 C:\Apache24\instantclient_12_1

TNS_ADMIN 에 C:\Apache24\instantclient_12_1

을 추가해주고,

커맨드 창에서

> sqlplus user/pass@192.168.1.2/orcl

로 접속이 되는지 확인합니다.

물론 위와 같은 오라클 서버가 잘 돌아가고 있다는 전제하에서 입니다.

접속이 된다면…..

4. 설정 잡기

아파치를 재시작해보고

phpinfo(); 를 해서 OCI8 이 나오는지 확인 해보고

여기서 안 나오면 대략 난감.. (저도 이 부분에서 만 하루를 헤맸습니다.)

5. 테스트해보기

<?php

$conn = oci_connect(“USER”, “PASS”, "192.168.1.2:1521/orcl");

if (!$conn) {

$m = oci_error();

echo $m['message'], "\n";

exit;

}

else {

echo "Connected to Oracle!";

}

/* multi rows */

$query = "SELECT COLUMN1,COLUMN2 FROM TABLENAME”;

$stid = oci_parse($conn, $query);

oci_execute($stid);

while (($row = oci_fetch_array($stid, OCI_BOTH))) {

echo $row[0] . " : " . $row[1] . "<br>";

}

echo "Total Count : " . oci_num_rows($stid);

oci_free_statement($stid);

oci_close($conn);

?>

잘 나온다면 성공한 겁니다. 축하합니다. ㅠㅠ

일본행을 앞두고…

본의 아니게 일본을 후딱 갔다오게 되었다…

정말 정신없이 준비해서 가는 느낌이다..

여권 만들고, 항공권 티켓팅하고, 묵을 숙소 정하고…

내가 놀러가는게 아닌데… 왜 내가 설레이지? 정말 오랜만의  혼자여행이라 그런가??

이틀간의 여행에서 내가 찾을 수 있는 것은 무엇일까??

 

사라져야 보이는 사람들

사라져야 보이는 사람들 이란 교회에서의 청년을 말한다고 한다. 교회 내에 있을 때는 보이지 않고 우리 교회엔 청년들이 없네 라고 말하다가.. 사라지면 아 그 청년 어디 갔어? 참 책임감도 없구만 이라는 말로 혀를 차곤 한다.

우리 청년들을 보면 어른들이 자라던 시절의 청년이 아님을 보게된다. 20대인 그들 얼굴에서 벌써 50대의 찌든 모습을 보게되고 갇혀버린 사고 속에 누군가를 단죄하고 있는 모습을 보게된다.

슬프다 이 모습이 우리 어른들이 물려준 모습이지 않은가? 희망을 이야기하지않고 절망만을 말하고 있는 세상과 금수저 흙수저로 날 때부터 희망을 물려줄수 없는 시대를 사는 이들을 어찌할 것인가?

이들에게 희망을 전하고 싶다. 삶의 기쁨을 나누고 싶다. 성공이 절대적 가치가 아니며, 부가 사람의 잣대가 아님을 말하고 싶다. 그러나 교회조차 그런 모습으로 변하는 것을 보면 너무 슬프다.

교회가 버려야 할 말 우선순위는 성공이다.

국정화

내가 자라며 배운 교과서는 국정교과서였다. 그 때 배우며 제일 이해가 안가며 어려웠던 과목이 사회, 윤리, 역사 였던듯 하다. 내가 가진 상식으로 맞는 답을 찾는것이 윤리여야 할터인데 너무나 낮은 점수로 간첩이냐는 소리까지 들었던… 그 때를 생각해본다. 그리고 이제 역사 국정화 이야기가 나온다.

어쩌면 너무나 많은 다양성을 받아들이려 했던 지도자들이 문제였는지도 모르겠다. 국민의 수준은 그렇지 못한데.. 다시금 돌아가려는 이 때. 어쩌면 단순화 시키려는 지도자들로 인해 우리 사회는 다시한번 깨우치는 기회가 되리라 생각되어진다.

우리의 아이들에게 갇힌 사고가 얼마나 어려운건지. 그 후 대학이란 공간에서 한없이 열려버린 이데올로기들을 정리할 길이 없어 다시금 길로 나와야 하는 것은 아닐찌.. 지금 길에는 대학생이 없다. 열린 비판도 없다. 닫혀버린 사람들의 아우성 뿐…

[라즈베리파이] 웹을 통한 GPIO 제어

목표 : 라즈베리파이를 이용한 웹을 통한 GPIO제어를 하려한다.

1. 라즈베리파이의 웹서비스 제공.

$sudo apt-get install lighttpd

lighttpd 서비스 설치.

$sudo lighttpd start

하고서 라즈베리파이의 IP를 브라우저에서 보면

스크린샷 2015-08-13 오후 12.03.40

lighttpd 화면을 볼 수 있다.

 

2. 설정변경.

pi@raspberrypi /var/www $ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 Jun 6 2012 /usr/bin/python -> python2.7

pi@raspberrypi /var/www $ sudo chmod u+s /usr/bin/python

pi@raspberrypi /var/www $ ls -l /usr/bin/python
-rwsr-xr-x 1 root root 2674528 Mar 17 18:16 /usr/bin/python
python의 실행권한을 변경하고,
$ sudo vi /etc/lighttpd/lighttpd.conf
server.modules = (
“mod_access”,
“mod_alias”,
“mod_accesslog”,
“mod_auth”,
“mod_ssi”,
“mod_cgi”,
“mod_compress”,
“mod_fastcgi”,
“mod_rewrite”,
)
server.modules 에 상기와 같이 변경해주고,
제일 하단에 python 화일을 넣어둘 디렉토리를 지정해준다.
$HTTP[“url”] =~ “^/py/” {
cgi.assign = ( “.py” => “/usr/bin/python” )
}
이후
$ sudo service lighttpd restart
재시작을 하고
test.py 를 /var/www/py 폴더 내에 입력해준다.
#! /usr/bin/python
# bring in the libraries
import RPi.GPIO as G
from flup.server.fcgi import WSGIServer
import sys, urlparse

# set up our GPIO pins
G.setmode(G.BOARD)
G.setup(7, G.OUT)
G.setup(11, G.OUT)
G.setup(13, G.OUT)

# all of our code now lives within the app() function which is called for each http request we receive
def app(environ, start_response):
# start our http response
start_response(“200 OK”, [(“Content-Type”, “text/html”)])
# look for inputs on the URL
i = urlparse.parse_qs(environ[“QUERY_STRING”])
yield (‘&nbsp;’) # flup expects a string to be returned from this function
# if there’s a url variable named ‘q’
if “q” in i:
if i[“q”][0] == “a”:
G.output(7, True)   # Turn it on
elif i[“q”][0] == “b”:
G.output(7, False)  # Turn it off
elif i[“q”][0] == “c”:
G.output(11, True)  # Turn it off
elif i[“q”][0] == “d”:
G.output(11, False)  # Turn it off
elif i[“q”][0] == “e”:
G.output(13, True)  # Turn it off
elif i[“q”][0] == “f”:
G.output(13, False)  # Turn it off

#by default, Flup works out how to bind to the web server for us, so just call it with our app() function and let it get on with it
WSGIServer(app).run()

$ chmod +x test.py
python 파일의 실행권한 변경.
/var/www/test.html 입력 내용.
<html>
<head>
<title>Hello from the Pi</title>
<script src=”//ajax.googleapis.com/ajax/libs/prototype/1.7.1.0/prototype.js”></script>
</head>
<body>
<h1>Hello world from the Raspberry Pi</h1>
<form>
<input type=”button” value=”1On” onclick=”go(‘a’)” style=”font-size:200%;”><br />
<input type=”button” value=”1Off” onclick=”go(‘b’)” style=”font-size:200%;”>
<br /><br />
<input type=”button” value=”2On” onclick=”go(‘c’)” style=”font-size:200%;”><br />
<input type=”button” value=”2Off” onclick=”go(‘d’)” style=”font-size:200%;”>
<br /><br />
<input type=”button” value=”3On” onclick=”go(‘e’)” style=”font-size:200%;”><br />
<input type=”button” value=”3Off” onclick=”go(‘f’)” style=”font-size:200%;”>
</form>
<script type=”text/javascript”>
function go(qry) {
new Ajax.Request(‘./py/test.py?q=’ + qry,
{method: ‘GET’}
);
}
</script>
</body>
</html>
GPIO 작업부분은 아래와 같이 7, 11, 13 번에 각각의 LED + 선을 연결하고, GND 선을 연결해준 후…
photo_1439435724
홈페이지 를 열어보시면… 아래와 같은 화면이 보인다.
 photo_1439435723
각각의 ON 을 누르면 아래와 같이 3개의 LED가 들어오는 것을 볼 수 있다.
photo_1439435722
참고 : http://make.bcde.jp/category/16/

apns 사용을 위한 인증서 생성하기.

apns 사용을 위한 인증서 생성하기.

aps_cert.p12 인증서 파일을 생성 키체인의 보내기를 통해 발급 후

Mac OS X의 터미널에서 아래 명령을 입력하여 ~~.pem 키 파일을 생성한다.

Enter Import Password가 나오면 방금 설정한 aps_cert.p12 인증서의 암호를 입력한다.

$ openssl pkcs12 -in aps_cert.p12 -out aps_private.pem -nodes -clcerts
Enter Import Password:
MAC verified OK

필요한 aps_private.pem 파일 생성이 완료된다.

 

from http://pyrasis.com/book/TheArtOfAmazonWebServices/Chapter26/04/03

How to send email from command line?

1. telnet abc.com(useful mail server) 25

2. helo xyz.com(your domain)

3. mail from:your@email.domain

4. rcpt to:destination@email.address

5. data

6. Type your message

7. .(type a period and hit enter)

That’s all!

숙제가 안풀린다~

아아아~~~ 미치겠당…

ssh tunneling 을 통한 mysql 연동을 해야하는데

암흑 속을 헤메이는 듯한 느낌이다…

답을 찾아야 할텐데…

1. mysql 연결 ok

2. ssh 연결 ok

3. tunneling 요게 문제임… 천천히 둘러가더라도 답을 찾아보자…

에구구~~~