- 정보공유
[PHP] php 를 asp 로 db연결방법 파일업로드
ASP와 데이터베이스는 ADO를 통해서 연동된다.
그러므로, ASP에서 사용할 수 있는 데이터베이스는 ADO로 연결할 수 있는
데이터베이스이다. 그런데, ADO로 연결할 수 있는 데이터베이스는 다시 OLE DB를
사용할 수 있는 데이터베이스와 ODBC 로 연결할 수 있는 데이터베이스이므로, 결국,
ASP에서는 ODBC를 제공하는 많은 데이터베이스에 연결할 수 있다는 의미가 된다.
<br>
ASP에서 데이터베이스를 연결할 때는 ODBC를 이용해 DSN을 만들고 연결하는
경우와 DSN 없이 직접 연결하는 경우로 나눌 수 있다. 보통 다음과 같은 방법으로
데이터베이스에 연결한다.
[code]
//** DSN을 사용하는 경우
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "DSN=MyDatabase;UID=zooba;PWD="
[/code]
[code]
//** DSN을 사용하지 않는 경우
set oConn=server.createobject("adodb.connection")
oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\inetpub\wwwroot\projectx\wmq.mdb;Persist Security Info=False"
oConn.Open
[/code]
첫번째 예에서는 ODBC로 설정한 DSN을 사용하였으며, 두번째 예에서는
DSN을 사용하지 않고 ADO를 통해 직접 데이터베이스에 연결하였다.
두 경우 모두 ADODB.Connection이라는 객체를 만들어서 이 객체를 이용하여
데이터베이스와 연결하는 방법을 사용하였다. 이 객체는 이후 쿼리를 수행하여
결과값을 받을 때도 사용된다.
ADO를 이용하여 데이터베이스와 연결하는 방법은 이 방법 외에도 레코드셋
객체를 이용하는 방법도 있다.
PHP의 DB 연결 방법
PHP는 소개한 대로 무수히 많은 데이터베이스와의 연동을 제공한다.
그 중 MySQL과 연동하는 부분과 함수에 대해서 알아보겠다.
[code]
$dbcon = mysql_connect("localhost","id","password");
mysql_select_db("dbname",$dbcon);
[/code]
데이터베이스에 접속하기 위해서는 데이터베이스 명(dbname), id, password를
위와 같이 입력하면 된다.
Query 전송 방법
ASP의 Query 전송 방법
Connection 객체를 생성하여 데이터베이스와 연결한 다음에는 데이터베이스로
쿼리를 전송하여 필요한 작업을 수행하게 된다. 보통 다음과 같은 코드를 사용한다.
[code]
' SQL 문을 구성한다
strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jose','Lugo')"
' Execute 메쏘드를 사용하여 쿼리를 수행한다.
cn.Execute(strSQL)
[/code]
결과값을 받아서 처리 해야 하는 경우에는 다음과 같이 레코드셋을 통해
결과값을 받을 수 있다. 물론, 레코드 셋을 사용하기 전에 반드시 RecordSet
객체를 만들어야 한다.
[code]
' 레코드셋 객체 생성
Set rsCustomers = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT FirstName, LastName from Customers"
' Execute 메쏘드를 사용하여 쿼리를 수행하고 결과 값을 rsCustomers 객체로 받는다.
Set rsCustomers = cn.Execute(strSQL)
[/code]
PHP의 Query 전송 방법
데이터베이스에 연결되면 이제 데이터베이스에 저장된 내용을 선택해서 읽거나
지우고, 새로운 내용을 입력하고, 내용을 갱신하는 작업을 하게 된다. 아래 간단한
소스를 보자.
[code]
1 $query="select * from news_tbl where number > 5 ";
2 $result = mysql_query($query,$dbconn);
3 if( !$result) {
4 echo("
5 9 ");
10 exit;
11 }
12 $total = mysql_affected_rows();
13 $row=mysql_fetch_array($result);
[/code]
변수 $query 에 실행할 SQL 문을 저장하고 mysql_query( ) 함수를 이용하여
Query를 수행한다.
실행된 결과를 확인해서 Error 여부를 확인한다.
변수 $total에는 선택된 모든 column의 수가 저장되며 $row에는 선택된 column의
첫 내용이 저장된다.
데이터베이스에 접속하기 위해서는 데이터베이스 명(dbname), id, password를
위와 같이 입력하면 된다.
ASP의 상태 정보 유지
ASP에서 상태 정보를 유지하는 방법은 여러 가지가 있지만, 서버측에서 처리할 수
있는 방법으로는 Session 객체와 Application 객체를 사용하는 방법이 가장 편리하게
사용할 수 있는 방법이다.
Session 객체는 Connection을 맺는 각 사용자들에 대한 상태 정보를 설정하고
관리할 수 있는 객체이며, Application 객체는 Application 전체에 걸쳐 사용되는,
개별 사용자와는 무관하게 관리해야 하는 상태정보를 처리하기 위한 객체이다.
[code]
Session("UserName") = "zooba"
UserName = Session("UserName")
[/code]
첫번째 문장은 Session 객체에 UserName이라는 변수를 만들어서 여기에 "zooba"라는
값을 저장하는 예이며, 두번째는 UserName이라는 세션 객체의 값을 UserName이라는
변수에 저장하는 예이다.
위의 예에서 볼 수 있듯이 상태 정보를 일종의 변수를 사용하는 형태로 간편하게
사용할 수 있다. 애플리케이션 수준에서 사용해야 하는 변수 값을 Application 객체를
이용하여 저장하거나 읽어 올 수 있다.
ASP에서는 Application과 Session 객체에 관련된 OnStart, OnEnd 를 제공하여,
애플리케이션이 시작되거나 종료될 때, 세션이 시작되거나 종료될 때 특별한
처리를 할 수 있다.
PHP의 상태 정보 유지
Cookie를 이용하여 상태정보를 유지하는 방법에 대해서 알아보겠다.
먼저 Cookie의 셋팅은 SetCookie()를 이용하면 간단하게 처리된다.
[code]
//SetCookie( $name, $value, $expire); 의 형태로 사용하면 값이 설정되고 설정된 값을 읽어 오려면 $HTTP_VAR_COOKIE를 사용한다.
// Cookie Set 하기
SetCookie( "cookie_test", "cookie_test_value", time() + 300);
// Cookie Get 하기
$cValue = $HTTP_VAR_COOKIE["cookie_test"];
[/code]
File Upload
ASP에서의 File Upload
ASP만으로는 파일을 업로드할 수 있는 기능을 구현할 수 없다.
파일 업로드 기능을 구현하려면 ASP와 함께 마이크로소프트의 포스팅
액셉터(Posting Acceptor) 컴포넌트를 사용해야 한다(물론 파일 업로드와
관련된 기능을 지원하는 다양한 컴포넌트를 구해서 사용할 수 있다).
포스팅 액셉터는 HTTP 연결을 통해 multi-form/posting 메쏘드를 사용하는
마이크로소프트의 웹 퍼블리싱 위저드나 다른 클라이언트 프로그램에서 IIS로
파일을 업로드할 수 있도록 하는 기능을 지원하는 IIS 확장 DLL(CPSHOTS.DLL) 이다.
다음 예는 이미지 파일을 서버의특정 디렉토리로 올리는 예이다.
우선 서버쪽의 포스팅 액셉터 컨트롤과 관련된 사항을 다음과 같이 설정한다.
[code]
strServerURL = "http://" + Request.ServerVariables("SERVER_NAME")
strTargetURL = strServerURL & "/Administration"
strRepostURL = strServerURL & "/Administration/AddEmployeeFinish.asp"
strPathToPA = strServerURL & "/scripts/cpshost.dll"
strPostingURL = strPathToPA + "?PUBLISH?" + strRepostURL
[/code]
그 다음에는 아래와 같이 폼을 만드는 ASP 페이를 작성한다.
GIF나 JPEG 형식의 이미지의 경로를 설정합니다.
위와 같이 올린 파일의 파일명과 확장자, 경로를 처리하기 위한 코드는 다음과 같다.
[code]
For I = 1 To Request.Form("FileName").Count
strFilename = Request.Form("FileName")(I)
& Request.Form("FileExtention")(I)
strPath = Request.Form("FilePath")(I)
Next
[/code]
PHP에서의 File Upload
ASP에서는 지원하지 않는 기능으로 PHP 3.0.10 이후부터 추가된 기능으로 File Uploads 기능이 있다. 이는 RFC-1867을 지원하는 브라우저로부터 파일을 업로드 받을 수 있는 기능이 있다. 이 기능을 사용하면 Text 뿐만 아니라 Binary 파일도 업로드가 가능하다.
우선 아래와 같이 파일을 업로드 할 수 있는 폼을 만들어 보자.
[code]
<FORM ENCTYPE="multipart/form-data" action="upload.php3" METHOD=post>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <INPUT NAME="upfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
[/code]
라인 2의 hidden 필드인 MAX_FILE_SIZE는 File input 필드들보다 선행되어야 하며 이 값은 PHP html이 받아들이는 최대 파일 크기를 Byte단위로 나타낸다. 업로드가 성공적으로 되면 지정된 파일에는 다음과 같은 변수들이 자동으로 정의되어 진다.
$upfile - 업로드된 파일 내용이 저장되어 있는 서버의 임시 파일명.
$upfile_name - 업로드한 시스템에서 사용하는 파일의 원래 이름.
$upfile_size - byte단위의 Upload된 파일의 크기.
$upfile_type - 만약 browser가 업로드된 파일의 mime 형식을 안다면, 그 mime 형식.
전달된 파일을 로컬에 있는 data 디렉토리에 저장하는 예제 입니다.
[code]
if (!empty($upfile_name)) {
$fname = "./data/".$upfile_name;
$blob = fread(fopen($upfile, "r"), filesize($upfile));
$fp=fopen($fname, "w" ) or die( "화일을 열수 없습니다") ;
fwrite($fp, $blob);
fclose($fp);
[/code]
ASP에서의 File Handling
ASP에서 직접 파일을 제어할 수 있는 방법은 없다.
다만, FileSystem Object(FSO)라는 객체를 이용하여 파일을 제어하는 방법을 사용하면 된다.
다음 코드는 파일에 한 문장을 출력하여 저장하는 예이다.
[code]
Set fs = CreateObject("scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.txt", True)
a.WriteLine("This is a test.")
a.Close
[/code]
PHP에서의 File Handling
File Upload 부분에서 보았듯이 C 언어에서 쓰는 것과 비슷하게 File Handling 함수를 제공한다.
단 PHP 변수이기 때문에 변수 앞에 $를 붙여준다.
[code]
$fp=fopen($fname, "w" ) or die( "화일을 열수 없습니다") ;
fwrite($fp, "파일에 쓰기");
fclose($fp);
[/code]
그러므로, ASP에서 사용할 수 있는 데이터베이스는 ADO로 연결할 수 있는
데이터베이스이다. 그런데, ADO로 연결할 수 있는 데이터베이스는 다시 OLE DB를
사용할 수 있는 데이터베이스와 ODBC 로 연결할 수 있는 데이터베이스이므로, 결국,
ASP에서는 ODBC를 제공하는 많은 데이터베이스에 연결할 수 있다는 의미가 된다.
<br>
ASP에서 데이터베이스를 연결할 때는 ODBC를 이용해 DSN을 만들고 연결하는
경우와 DSN 없이 직접 연결하는 경우로 나눌 수 있다. 보통 다음과 같은 방법으로
데이터베이스에 연결한다.
[code]
//** DSN을 사용하는 경우
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "DSN=MyDatabase;UID=zooba;PWD="
[/code]
[code]
//** DSN을 사용하지 않는 경우
set oConn=server.createobject("adodb.connection")
oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\inetpub\wwwroot\projectx\wmq.mdb;Persist Security Info=False"
oConn.Open
[/code]
첫번째 예에서는 ODBC로 설정한 DSN을 사용하였으며, 두번째 예에서는
DSN을 사용하지 않고 ADO를 통해 직접 데이터베이스에 연결하였다.
두 경우 모두 ADODB.Connection이라는 객체를 만들어서 이 객체를 이용하여
데이터베이스와 연결하는 방법을 사용하였다. 이 객체는 이후 쿼리를 수행하여
결과값을 받을 때도 사용된다.
ADO를 이용하여 데이터베이스와 연결하는 방법은 이 방법 외에도 레코드셋
객체를 이용하는 방법도 있다.
PHP의 DB 연결 방법
PHP는 소개한 대로 무수히 많은 데이터베이스와의 연동을 제공한다.
그 중 MySQL과 연동하는 부분과 함수에 대해서 알아보겠다.
[code]
$dbcon = mysql_connect("localhost","id","password");
mysql_select_db("dbname",$dbcon);
[/code]
데이터베이스에 접속하기 위해서는 데이터베이스 명(dbname), id, password를
위와 같이 입력하면 된다.
Query 전송 방법
ASP의 Query 전송 방법
Connection 객체를 생성하여 데이터베이스와 연결한 다음에는 데이터베이스로
쿼리를 전송하여 필요한 작업을 수행하게 된다. 보통 다음과 같은 코드를 사용한다.
[code]
' SQL 문을 구성한다
strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jose','Lugo')"
' Execute 메쏘드를 사용하여 쿼리를 수행한다.
cn.Execute(strSQL)
[/code]
결과값을 받아서 처리 해야 하는 경우에는 다음과 같이 레코드셋을 통해
결과값을 받을 수 있다. 물론, 레코드 셋을 사용하기 전에 반드시 RecordSet
객체를 만들어야 한다.
[code]
' 레코드셋 객체 생성
Set rsCustomers = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT FirstName, LastName from Customers"
' Execute 메쏘드를 사용하여 쿼리를 수행하고 결과 값을 rsCustomers 객체로 받는다.
Set rsCustomers = cn.Execute(strSQL)
[/code]
PHP의 Query 전송 방법
데이터베이스에 연결되면 이제 데이터베이스에 저장된 내용을 선택해서 읽거나
지우고, 새로운 내용을 입력하고, 내용을 갱신하는 작업을 하게 된다. 아래 간단한
소스를 보자.
[code]
1 $query="select * from news_tbl where number > 5 ";
2 $result = mysql_query($query,$dbconn);
3 if( !$result) {
4 echo("
5 9 ");
10 exit;
11 }
12 $total = mysql_affected_rows();
13 $row=mysql_fetch_array($result);
[/code]
변수 $query 에 실행할 SQL 문을 저장하고 mysql_query( ) 함수를 이용하여
Query를 수행한다.
실행된 결과를 확인해서 Error 여부를 확인한다.
변수 $total에는 선택된 모든 column의 수가 저장되며 $row에는 선택된 column의
첫 내용이 저장된다.
데이터베이스에 접속하기 위해서는 데이터베이스 명(dbname), id, password를
위와 같이 입력하면 된다.
ASP의 상태 정보 유지
ASP에서 상태 정보를 유지하는 방법은 여러 가지가 있지만, 서버측에서 처리할 수
있는 방법으로는 Session 객체와 Application 객체를 사용하는 방법이 가장 편리하게
사용할 수 있는 방법이다.
Session 객체는 Connection을 맺는 각 사용자들에 대한 상태 정보를 설정하고
관리할 수 있는 객체이며, Application 객체는 Application 전체에 걸쳐 사용되는,
개별 사용자와는 무관하게 관리해야 하는 상태정보를 처리하기 위한 객체이다.
[code]
Session("UserName") = "zooba"
UserName = Session("UserName")
[/code]
첫번째 문장은 Session 객체에 UserName이라는 변수를 만들어서 여기에 "zooba"라는
값을 저장하는 예이며, 두번째는 UserName이라는 세션 객체의 값을 UserName이라는
변수에 저장하는 예이다.
위의 예에서 볼 수 있듯이 상태 정보를 일종의 변수를 사용하는 형태로 간편하게
사용할 수 있다. 애플리케이션 수준에서 사용해야 하는 변수 값을 Application 객체를
이용하여 저장하거나 읽어 올 수 있다.
ASP에서는 Application과 Session 객체에 관련된 OnStart, OnEnd 를 제공하여,
애플리케이션이 시작되거나 종료될 때, 세션이 시작되거나 종료될 때 특별한
처리를 할 수 있다.
PHP의 상태 정보 유지
Cookie를 이용하여 상태정보를 유지하는 방법에 대해서 알아보겠다.
먼저 Cookie의 셋팅은 SetCookie()를 이용하면 간단하게 처리된다.
[code]
//SetCookie( $name, $value, $expire); 의 형태로 사용하면 값이 설정되고 설정된 값을 읽어 오려면 $HTTP_VAR_COOKIE를 사용한다.
// Cookie Set 하기
SetCookie( "cookie_test", "cookie_test_value", time() + 300);
// Cookie Get 하기
$cValue = $HTTP_VAR_COOKIE["cookie_test"];
[/code]
File Upload
ASP에서의 File Upload
ASP만으로는 파일을 업로드할 수 있는 기능을 구현할 수 없다.
파일 업로드 기능을 구현하려면 ASP와 함께 마이크로소프트의 포스팅
액셉터(Posting Acceptor) 컴포넌트를 사용해야 한다(물론 파일 업로드와
관련된 기능을 지원하는 다양한 컴포넌트를 구해서 사용할 수 있다).
포스팅 액셉터는 HTTP 연결을 통해 multi-form/posting 메쏘드를 사용하는
마이크로소프트의 웹 퍼블리싱 위저드나 다른 클라이언트 프로그램에서 IIS로
파일을 업로드할 수 있도록 하는 기능을 지원하는 IIS 확장 DLL(CPSHOTS.DLL) 이다.
다음 예는 이미지 파일을 서버의특정 디렉토리로 올리는 예이다.
우선 서버쪽의 포스팅 액셉터 컨트롤과 관련된 사항을 다음과 같이 설정한다.
[code]
strServerURL = "http://" + Request.ServerVariables("SERVER_NAME")
strTargetURL = strServerURL & "/Administration"
strRepostURL = strServerURL & "/Administration/AddEmployeeFinish.asp"
strPathToPA = strServerURL & "/scripts/cpshost.dll"
strPostingURL = strPathToPA + "?PUBLISH?" + strRepostURL
[/code]
그 다음에는 아래와 같이 폼을 만드는 ASP 페이를 작성한다.
GIF나 JPEG 형식의 이미지의 경로를 설정합니다.
위와 같이 올린 파일의 파일명과 확장자, 경로를 처리하기 위한 코드는 다음과 같다.
[code]
For I = 1 To Request.Form("FileName").Count
strFilename = Request.Form("FileName")(I)
& Request.Form("FileExtention")(I)
strPath = Request.Form("FilePath")(I)
Next
[/code]
PHP에서의 File Upload
ASP에서는 지원하지 않는 기능으로 PHP 3.0.10 이후부터 추가된 기능으로 File Uploads 기능이 있다. 이는 RFC-1867을 지원하는 브라우저로부터 파일을 업로드 받을 수 있는 기능이 있다. 이 기능을 사용하면 Text 뿐만 아니라 Binary 파일도 업로드가 가능하다.
우선 아래와 같이 파일을 업로드 할 수 있는 폼을 만들어 보자.
[code]
<FORM ENCTYPE="multipart/form-data" action="upload.php3" METHOD=post>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <INPUT NAME="upfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Send File">
</FORM>
[/code]
라인 2의 hidden 필드인 MAX_FILE_SIZE는 File input 필드들보다 선행되어야 하며 이 값은 PHP html이 받아들이는 최대 파일 크기를 Byte단위로 나타낸다. 업로드가 성공적으로 되면 지정된 파일에는 다음과 같은 변수들이 자동으로 정의되어 진다.
$upfile - 업로드된 파일 내용이 저장되어 있는 서버의 임시 파일명.
$upfile_name - 업로드한 시스템에서 사용하는 파일의 원래 이름.
$upfile_size - byte단위의 Upload된 파일의 크기.
$upfile_type - 만약 browser가 업로드된 파일의 mime 형식을 안다면, 그 mime 형식.
전달된 파일을 로컬에 있는 data 디렉토리에 저장하는 예제 입니다.
[code]
if (!empty($upfile_name)) {
$fname = "./data/".$upfile_name;
$blob = fread(fopen($upfile, "r"), filesize($upfile));
$fp=fopen($fname, "w" ) or die( "화일을 열수 없습니다") ;
fwrite($fp, $blob);
fclose($fp);
[/code]
ASP에서의 File Handling
ASP에서 직접 파일을 제어할 수 있는 방법은 없다.
다만, FileSystem Object(FSO)라는 객체를 이용하여 파일을 제어하는 방법을 사용하면 된다.
다음 코드는 파일에 한 문장을 출력하여 저장하는 예이다.
[code]
Set fs = CreateObject("scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.txt", True)
a.WriteLine("This is a test.")
a.Close
[/code]
PHP에서의 File Handling
File Upload 부분에서 보았듯이 C 언어에서 쓰는 것과 비슷하게 File Handling 함수를 제공한다.
단 PHP 변수이기 때문에 변수 앞에 $를 붙여준다.
[code]
$fp=fopen($fname, "w" ) or die( "화일을 열수 없습니다") ;
fwrite($fp, "파일에 쓰기");
fclose($fp);
[/code]