티스토리 뷰

아이폰에서 NSURLRequest 를 통해서
iis7 + Classic ASP + MSSQL Server 2008 (euc-kr)
로 파일과 데이터를 POST 했는데
응답이 전혀 없는 사태가 발생하였다.

전송된 값 받아 처리하는 서버측 ASP 스크립트를 POST 값이 무조건 찍히도록 해보았지만
역시 응답값은 없었다.

2.5일 동안 갖가지 노력을 기울였지만 결과는 (null)
이렇게 하면 시간만 허비된다고 판단짓고
대안을 찾아서 일단 작동하는것을 목표로 했다.

MS에서 제공되는 웹플랫폼 설치 관리자를 통해
IIS에서 PHP+MSSQL 환경을 설치 및 셋팅하였다.

PHP를 통해서 전송된 값을 찍어보았더니
PHP는 잘 나타났다.

이때, 대안을 2가지 마련했다.
1. PHP에서 sqlsrv 함수를 통하여 직접 MSSQL Server 입력까지.
2. PHP에서 curl()을 이용하여 ASP로 값 전달.


1. PHP sqlsrv 이용 직접 DB입력처리

ASP로 제작되었던 처리스크립트를 PHP로 전환시키는 작업을 하고
MSSQL을 위해서 IIS PHP의 sqlsrv 함수들을 사용하여
데이터를 입력해보았는데 영문은 잘 들어가는데
한글을 포함하면 입력되지 않았다.

하여 PHP의 icon("utf-8", "cp949", {$val}) 을 통한 문자셋 변경을 해서
쿼리를 날렸더니 DB에 한글까지 입력 성공!

만약 iconv된 쿼리를 디버깅시 Xcode Debug area 에서 보려면
다시 utf-8 로 전환시켜줘야 보인다. Xcode는 utf-8만 보이니까...

2. PHP curl 이용 값 전달

전송받은 값을 curl로 전송시

한글 전송을 위해 1.에서와 같이 iconv로 문자셋 전환 해 줘야하고,
요청 URL은 http:// 부터의 전체 URL을 써줘야 한다.

파일 전송시는 "@". realpath({$파일전체경로}) 와 같이
서두에 @ 문자를 넣어서 보내면 $_FILES로 인식한다.
$data['name'] = $_POST['name'];
$data['subject'] = $_POST['subject'];
$data['content'] = $_POST['content'];

$data['file'] = "";
if ($_FILES['file']) {
    if (move_uploaded_file($_FILES['file']['tmp_name'], "./data/". $_FILES['file']['name'])) {
        $data['file'] = "@". realpath("./data") ."/". $_FILES['file']['name'];
    }
}

// 문자셋 변경 - 아이폰에서는 UTF-8로 날아오므로 한글문자셋으로 변경해준다.
foreach($data as $key=>$val) {
	$data[$key] = iconv("UTF-8", "CP949", $val);
}

// CURL을 통한 데이터 전송
$request_url = "http://test.curl.com/form_update.asp";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);
echo($response); 
댓글