Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Azure上使用PHP发布方法_Php_Angularjs_Http_Azure_Post - Fatal编程技术网

在Azure上使用PHP发布方法

在Azure上使用PHP发布方法,php,angularjs,http,azure,post,Php,Angularjs,Http,Azure,Post,我直接从其他地方复制并粘贴了这段代码,效果非常好。我刚刚上传到azure上自己的服务器上,没有收到任何响应,但肯定有一个请求。我不知道当它是完全相同的代码时,它是如何不响应的!有什么想法吗 <?php if (isset($_SERVER['HTTP_ORIGIN'])) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Crede

我直接从其他地方复制并粘贴了这段代码,效果非常好。我刚刚上传到azure上自己的服务器上,没有收到任何响应,但肯定有一个请求。我不知道当它是完全相同的代码时,它是如何不响应的!有什么想法吗

<?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!";
}
?>

默认情况下,在PHP中创建Azure Web App服务时,PHP运行时中没有名为
HTTP\u ORIGIN
的变量,变量
REQUEST\u METHOD
仅设置为“
GET
”。您可以编写代码
phpinfo()
在Azure上的PHP脚本中检查Azure上PHP运行时中的配置

因此前2个
IF
闭包中的代码永远不会运行。因此,如果您的AngularJs客户端与您的PHP服务器不在同一个域中(它们应该在这里的一个Azure Web App服务中),当您的客户端请求PHP服务器时,它将引发CORS问题

因此,您可以在Azure portal上设置自定义
HTTP_ORIGIN
应用程序内设置,该设置将在应用程序启动时的PHP运行时中设置

  • 登录,标题到页面以管理您的网站
  • 单击配置选项卡,向下滚动至应用程序设置部分
  • 为AngularJs客户端端点设置HTTP_原点。例如,如果您的AngularJs客户端在本地运行,则应将
    HTTP\U源
    设置为
    localhost
  • 单击底部导航的“保存”按钮,然后单击“重新启动”按钮以重新启动网站以加载自定义设置
然后,您可以在本地服务器上测试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;
  });
$http({
网址:'http://.azurewebsites.net/.php',
方法:“张贴”,
数据:{username:'username',password:'password'},
标题:{'Content-Type':'application/x-www-form-urlencoded'}
})
.success(函数(数据、状态、标题、配置){
控制台日志(数据);
})
.error(函数(数据、状态、标题、配置){
$scope.status=状态;
});

请粘贴HTTP请求和响应(如果有)日志-谢谢-和HTTP代码