我正在尝试在加载网页时获取设备的位置,并将其传递给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坐标
我该如何进行这项工作?我觉得这是爱丽丝梦游仙境兔子洞...
答案 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>