2015-01-03 5 views
2

PHP에서 변수를 신속하게 가져 오거나 변수 값을 가져 오십시오. 어떻게해야합니까?PHP 변수를 신속하게 가져올 수있는 방법

$name = "William"; 

이 문자열을 어떻게 Swift 스크립트로 가져올 수 있습니까? 누구든지 나를 도울 수 있습니까?

JSON과 POST 또는 뭔가 다른 것을 알고 있습니다. 그렇지 않으면 완전히 잃어 버렸습니다.

+0

제안 중복 질문 (http://stackoverflow.com/questions/24016142/how-to-make-an- http-request-in-swift)는이 질문에 대답하지 않습니다. 그것은 단지 질문의 클라이언트 쪽 절반을 다룹니다. 이 질문에 의해 제기 된 흥미로운 이슈는'$ name'을 클라이언트 애플리케이션에 전달하기 위해 PHP에서해야 할 일입니다. 그리고 그것은 다른 질문에서 전혀 다루어지지 않습니다. – Rob

답변

3

저는 스위프트 프로그래머가 아닌 iOS/PHP 개발자로서 대답하고 있습니다.

PHP 스크립트를 호스팅하는 웹 서버에 HTTP 요청을 보내면 지정된 매개 변수가있는 웹 페이지의 내용이 반환됩니다.

예를 들어 GET HTTP 요청을 다음 PHP 스크립트로 보낸 경우 응답은 사용하는 방법에 따라 NSData 또는 NSString의 형식으로 "William"이됩니다. 파라미터 GET http://myserver.com/some_script.php?name=William 함께

<?php 
    $name = "William"; 
    echo $name; 
?> 

: 사물의 신속한 측으로서

<?php 
    $name = $_GET['name']; // takes the ?name=William parameter from the URL 
    echo $name; // William 
?> 

는 요청을 전송하는 수많은 방법 중 하나를 나타내고, 여기에 완전하게 유효한 응답이 : https://stackoverflow.com/a/24016254/556479.

5

PHP에서 iOS 장치로 데이터를 가져 오려면 PHP 코드에서 JSON으로 보내도록하는 것이 좋습니다. JSON은 클라이언트 응용 프로그램이 구문 분석하기 쉽습니다 (특히 웹 서비스 응답이 더 복잡해짐에 따라). 그리고 유효한 응답과 일부 일반 서버 오류를 쉽게 구별 할 수 있습니다.

<?php 

    $name = "William"; 

    $results = Array("name" => $name); 

    header("Content-Type: application/json"); 
    echo json_encode($results); 

?> 

이 (a) 것을 규정하는 Content-Type 헤더를 지정

는 (예를 들어, $results 변수 아래) 다음은 json_encode 전화 I은 일반적으로 "연관 배열"를 생성, PHP에서 JSON 보내려면 응답은 application/json이 될 것입니다; 그리고 나서 (b)는 $results을 인코딩한다. 그런 다음 해당 응답을 구문 분석 NSJSONSerialization를 호출 스위프트 코드를 작성할 수 있습니다

{"name":"William"} 

:

는 JSON은 모양을 장치에 전달했다. 예를 들어, 스위프트 3 : 스위프트 2

let url = URL(string: "http://example.com/test.php")! 
let request = URLRequest(url: url) 

// modify the request as necessary, if necessary 

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
    guard let data = data else { 
     print("request failed \(error)") 
     return 
    } 

    do { 
     if let json = try JSONSerialization.jsonObject(with: data) as? [String: String], let name = json["name"] { 
      print("name = \(name)") // if everything is good, you'll see "William" 
     } 
    } catch let parseError { 
     print("parsing error: \(parseError)") 
     let responseString = String(data: data, encoding: .utf8) 
     print("raw response: \(responseString)") 
    } 
} 
task.resume() 

또는 :

let url = NSURL(string: "http://example.com/test.php")! 
let request = NSMutableURLRequest(URL: url) 

// modify the request as necessary, if necessary 

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in 
    guard let data = data else { 
     print("request failed \(error)") 
     return 
    } 

    do { 
     if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String: String], let name = json["name"] { 
      print("name = \(name)") // if everything is good, you'll see "William" 
     } 
    } catch let parseError { 
     print("parsing error: \(parseError)") 
     let responseString = String(data: data, encoding: NSUTF8StringEncoding) 
     print("raw response: \(responseString)") 
    } 
} 
task.resume() 
+0

더 이상 작동하지 않습니다. 더 이상 매개 변수에 오류를 줄 수 없습니다. 이 함수는 이제 던졌습니다. – Bas

+0

@Bas - 네, 스위프트 1.x 시대에 작성되었습니다. 돌아 왔을 때'println','OptionSet','NSJSONSerialization'에 의한 던지기 등은 없었습니다. Swift 2와 3을 위해 업데이트했습니다. – Rob

+0

바로! 업데이트 해줘서 고마워. – Bas

관련 문제