2016-01-23 96 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; 
    });