2013-08-28 116 views
1

我的問題是php的responseStatusCodes沒有顯示在iOS上。無論我在sendResponse()中返回的狀態碼是什麼,當在iOS中讀取responseStatusCode時,我都會得到輸出500.爲什麼是這樣以及如何修復它?我假設這是PHP的錯誤,並且與ASIHTTPRequest無關。但爲了好的衡量,我已經包含了iOS端使用的代碼。ASIHTTPRequest和PHP狀態碼總是返回200或500

讓我知道如果他們是你需要幫助我的任何其他代碼。

在此先感謝!

這是我用來啓動到服務器的連接的代碼。

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
request.shouldAttemptPersistentConnection = NO; 
[request setPostValue:name forKey:@"name"]; 
[request setPostValue:email forKey:@"email"]; 
[request setPostValue:phash forKey:@"phash"]; 
[request setDelegate:self]; 
[request startAsynchronous]; 

這是我在收到請求完成消息時運行的代碼。

/ 
- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    NSLog(@"Request Finished"); 
    int statusCode = [request responseStatusCode]; 
    if (statusCode == 150) { 
     NSLog(@"User Already Registered."); 
    } else if (statusCode == 155){ 
     NSLog(@"User Not Registered"); 
    } else if (statusCode == 403) { 
     NSLog(@"Tester 2"); 
    } else if (statusCode == 200) { 
     if (registering == true){ 
     [UIView animateWithDuration:1.0 animations:^{ 
      _wheel.alpha = 0.0; 
     }]; 
     [UIView animateWithDuration:1.0 delay:1.0 options:0 animations:^{ 
      _clickToRegister.alpha=1.0; 
     }completion:nil]; 
     } else { 
      [UIView animateWithDuration:1.0 animations:^{ 
       _wheel.alpha = 0.0; 
      }]; 
      [UIView animateWithDuration:1.0 delay:1.0 options:0 animations:^{ 
       _clickToLogin.alpha=1.0; 
      }completion:nil]; 
     } 
     NSLog(@"Tester 3"); 
    } else if (statusCode > 1 && statusCode < 1000){ 
     NSLog(@"Test Worked"); 
     NSLog(@"%d",statusCode); 
    } else { 
     NSLog(@"%d",statusCode); 
     NSLog(@"Tester 4"); 
    } 
} 

這是應該發送responseStatusCode的PHP代碼。

function sendResponse($status, $body = '', $content_type = 'text/html') 
{ 
    $status_header = 'HTTP/1.1 ' . $status . ' ' . 'error'; 
    header($status_header); 
    header('Content-type: ' . $content_type); 
    echo $body; 
} 

這裏是調用這個函數的代碼。

sendResponse(503, 'User not Registered'); 
return false; 

以下是其中包含sendResponse調用的整個文件的代碼。

<?php 
require_once 'includes/main.php'; 
class dumb { 
function dumber(){ 
    echo "Hello, PHP!"; 
/*-------------------------------------------------- 
    Handle visits with a login token. If it is 
    valid, log the person in. 
---------------------------------------------------*/ 


if(isset($_GET['tkn'])){ 

    // Is this a valid login token? 
    $user = User::findByToken($_GET['tkn']); 

    if($user){ 

     // Yes! Login the user and redirect to the protected page. 

     $user->login(); 
     redirect('panic://success'); 
    } 

    // Invalid token. Redirect back to the login form. 
    redirect('panic://fail'); 
} 



/*-------------------------------------------------- 
    Handle logging out of the system. The logout 
    link in protected.php leads here. 
---------------------------------------------------*/ 


if(isset($_GET['logout'])){ 

    $user = new User(); 

    if($user->loggedIn()){ 
     $user->logout(); 
    } 

    redirect('index.php'); 
} 


/*-------------------------------------------------- 
    Don't show the login page to already 
    logged-in users. 
---------------------------------------------------*/ 


$user = new User(); 

if($user->loggedIn()){ 
    redirect('protected.php'); 
} 



/*-------------------------------------------------- 
    Handle submitting the login form via AJAX 
---------------------------------------------------*/ 

     if (isset($_POST["name"]) && isset($_POST["email"]) && isset($_POST["phash"])){ 
      rate_limit($_SERVER['REMOTE_ADDR']); 

      rate_limit_tick($_SERVER['REMOTE_ADDR'], $_POST['email']); 

      $message = ''; 
      $name = $_POST["name"]; 
      $email = $_POST["email"]; 
      $phash = $_POST["phash"]; 
      $subject = 'Your Login Link'; 

      if(!User::exists($email)){ 
       $subject = "Thank You for Registering!"; 
       $message = "Thank you for registering at our site!\n\n"; 
       // Attempt to login or register the person 
      $user = User::loginOrRegister($email, $name, $phash); 


      $message.= "You can login from this URL:\n"; 
      $message.= get_page_url()."?tkn=".$user->generateToken()."\n\n"; 

      $message.= "The link is going expire automatically after 10 minutes."; 

      $result = send_email($fromEmail, $_POST['email'], $subject, $message); 

      if(!$result){ 
      sendResponse(403, 'Error Sending Email'); 
      return false; 
      } 
      } 
      else{ 
       sendResponse(150, 'User Already Registered'); 
       return false; 
      } 
     } 
     else if(isset($_POST["email"]) && isset($_POST["phash"])){ 
      rate_limit($_SERVER['REMOTE_ADDR']); 

      rate_limit_tick($_SERVER['REMOTE_ADDR'], $_POST['email']); 

      $message = ''; 
      $name = ''; 
      $email = $_POST["email"]; 
      $phash = $_POST["phash"]; 
      $subject = 'Your Login Link'; 

      if(!User::exists($email)){ 
       sendResponse(155, 'User Not Registered'); 
       return false; 
      } 
      else{ 
      // Attempt to login or register the person 
      $user = User::loginOrRegister($email, $name, $phash); 


      $message.= "You can login from this URL:\n"; 
      $message.= get_page_url()."?tkn=".$user->generateToken()."\n\n"; 

      $message.= "The link is going expire automatically after 10 minutes."; 

      $result = send_email($fromEmail, $_POST['email'], $subject, $message); 

      if(!$result){ 
      sendResponse(403, 'Error Sending Email'); 
      return false; 
      } 
     } 
     } 

     die(json_encode(array(
      'message' => 'Thank you! We\'ve sent a link to your inbox. Check your spam folder as well.' 
     ))); 

/*-------------------------------------------------- 
    Output the login form 
---------------------------------------------------*/ 
} 
} 
$api = new dumb; 
$api->dumber(); 
?> 
+0

嗯,我試了PHP代碼,它返回503.從一眼看來,它看起來像iOS代碼是正確的。你確定PHP正在運行'sendResponse(503,'未註冊用戶');'?你可以在調用該行之前回應一些信息,以驗證它是否被調用,並且由於之前出現了編碼錯誤,PHP不會將它傳遞給其他人以返回其他內容。這是我犯的一個常見錯誤。 –

+0

如果我回應一些事情,那會有幫助嗎?我如何查看回應的內容? –

+0

嗯,我確定'sendResponse(503 ...'在if語句中,對嗎?「if($ userNotRegistered){sendResponse(503 ...)'如果在'sendResponse'被調用之前打印一些東西,你可以肯定的是,503被設置爲PHP的狀態碼,設置503的PHP代碼是正確的,並且iOS似乎是正確的,所以它必須是PHP文件另一部分的編碼錯誤,必須把'echo「輸出503」;'sendResponse'前面,然後檢查iOS中的響應字符串,如果你給我這個網站的URL,我可以檢查我自己 –

回答

0

我有一個語法錯誤。 A /關閉php標籤後:O。對不起

相關問題