2016-01-23 88 views
-1

我直接從其他地方複製並粘貼了此代碼,這些代碼完美地工作我剛剛上傳到我自己的服務器上,但沒有迴應,但肯定有請求進入。我不知道它是如何沒有反應,當它是完全相同的代碼!有任何想法嗎?在Azure上使用PHP的Post方法

<?php 
if (isset($_SERVER['HTTP_ORIGIN'])) { 
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); 
    header('Access-Control-Allow-Credentials: true'); 
    header('Access-Control-Max-Age: 86400'); // cache for 1 day 
} 

// Access-Control headers are received during OPTIONS requests 
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) 
     header("Access-Control-Allow-Methods: GET, POST, OPTIONS");   

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) 
     header("Access-Control-Allow-Headers:  {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); 

    exit(0); 
} 


$postdata = file_get_contents("php://input"); 
if (isset($postdata)) { 
    $request = json_decode($postdata); 
    $username = $request->username; 

    if ($username != "") { 
     echo "Server returns: " . $username; 
    } 
    else { 
     echo "Empty username parameter!"; 
    } 
} 
else { 
    echo "Not called properly with username parameter!"; 
} 
?> 
+0

請貼HTTP請求和響應(如果有的話)的日誌 - 感謝 - 和HTTP代碼 – danday74

回答

0

因爲默認情況下,當你在PHP中創建一個Azure的Web應用程序服務,沒有變量命名HTTP_ORIGIN在PHP運行時,變量REQUEST_METHOD只設置爲「GET。您可以在Azure的PHP腳本中編寫代碼phpinfo();,以檢查Azure上PHP運行時的配置。

所以前面的代碼將永遠不會運行。因此,如果您的AngularJs客戶端與您的PHP服務器不在同一個域中(它們應該位於一個Azure Web應用服務中),那麼當您的客戶端請求PHP服務器時,它將引發CORS問題。

因此,您可以在Azure門戶的應用程序設置中設置自定義HTTP_ORIGIN,這將在您的應用程序啓動時在PHP運行時中設置。

  • 登錄Azure classic portal,標題頁面管理您的網站。
  • 點擊CONFIGURE選項卡,向下滾動到應用程序設置部分
  • 設置HTTP_ORIGIN您AngularJs客戶端點。例如。如果您的客戶端AngularJs本地運行,你應該設置HTTP_ORIGINlocalhostenter image description here
  • 單擊保存按鈕,底部導航,點擊重啓按鈕,重新啓動該網站加載您的自定義設置。

然後你就可以在本地服務器上測試您的應用程序AngularJs:

$http({ 
    url: 'http://<your_web_site_na,e>.azurewebsites.net/<post_page>.php', 
    method: "POST", 
    data: { username: 'username', password: 'password' }, 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
    }) 
    .success(function (data, status, headers, config) { 
    console.log(data); 
    }) 
    .error(function (data, status, headers, config) { 
    $scope.status = status; 
    });