想要使用getCurrentPosition()或类似方法获取设备的GPS位置并将结果返回到PHP中

时间:2018-09-26 03:52:38

标签: javascript php

我正在尝试在加载网页时获取设备的位置,并将其传递给PHP中的两个变量(经纬度长),以便可以在脚本中进一步对其进行操作。目前,我已经由Tasker通过URL手动输入了数据,但是我也希望在正常的网页中也可以使用它,而不必每次都手动将数据放入URL。

我试图使用getCurrentPosition()JavaScript来做到这一点,但我找不到将其重新带回PHP的方法。我尝试编写两个单独的文件,但是我似乎从文件中得到的只是JS脚本,因为它尚未处理该文件。因此不是实际数据本身。

PHP文件:         

$arrContextOptions=array(
    "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ),
);  

ob_start();

$location = file_get_contents('https://myfakeurl.com/getlocation.php', false, stream_context_create($arrContextOptions));

$GPSCoord = explode(",", $location);
$coord['lat'] = trim($GPSCoord[0]);
$coord['long'] = trim($GPSCoord[1]);


echo "Longitude: " . $coord['long'] . "<br>";
echo "Lattitude: " . $coord['lat'] . "<br>";

?>

和JS文件:

<p id="coord"></p>

<script>
var x = document.getElementById("coord");

function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    } else { 
        x.innerHTML = "Geolocation is not supported by this browser.";
    }
}

function showPosition(position) {
    x.innerHTML = position.coords.latitude + "," + 
    position.coords.longitude;
}

getLocation()
</script>

JS也需要在设备上运行,这是问题的一部分,否则您将无法获得正确的GPS坐标

我该如何进行这项工作?我觉得这是爱丽丝梦游仙境兔子洞...

1 个答案:

答案 0 :(得分:0)

如果您使用php的file_get_contents函数,则js代码将无法运行,因为javascript是客户端语言。必须从浏览器打开页面以运行javascript。您可以在加载的网页上放置javascript代码,捕获位置数据并使用ajax发送到php。试试这样的东西

backend.php

<?php
if(isset($_POST['lng'], $_POST['lat'])) {
    echo $_POST['lng'].':'.$_POST['lat'];
}
?>

frontend.html

<html>
<head>
<meta charset="utf-8">
</head>
<body>
    <div id="response">
    </div>
<script>
function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(sendPosition);
    } else {
        x.innerHTML = "Geolocation is not supported by this browser.";
    }
}

function sendPosition(position) {
    var xhttp = new XMLHttpRequest();
    xhttp.open("POST", "http://fakeurl/backend.php", false);
    xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhttp.send("lng="+position.coords.longitude+"&lat="+position.coords.latitude); 

    document.getElementById('response').innerHTML = xhttp.responseText;
}  

getLocation();
</script>
</body>
</html>