Reputation: 87
I have a problem while calling javasript function in php. I found this script in : How to get client's IP address using javascript only?
<html>
<body>
<h1> Demo retrieving Client IP using WebRTC </h1>
<script type="text/javascript">
function findIP(onNewIP) { // onNewIp - your listener function for new IPs
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
var pc = new myPeerConnection({iceServers: []}),
noop = function() {},
localIPs = {},
ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
key;
function ipIterate(ip) {
if (!localIPs[ip]) onNewIP(ip);
localIPs[ip] = true;
}
pc.createDataChannel(""); //create a bogus data channel
pc.createOffer(function(sdp) {
sdp.sdp.split('\n').forEach(function(line) {
if (line.indexOf('candidate') < 0) return;
line.match(ipRegex).forEach(ipIterate);
});
pc.setLocalDescription(sdp, noop, noop);
}, noop); // create offer and set local description
pc.onicecandidate = function(ice) { //listen for candidate events
if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
};
}
var ul = document.createElement('ul');
ul.textContent = 'Your IPs are: '
document.body.appendChild(ul);
function addIP(ip) {
console.log('got ip: ', ip);
var li = document.createElement('li');
li.textContent = ip;
ul.appendChild(li);
}
findIP(addIP);
</script>
<?php echo "<script>addIP(ip);</script>"; ?>
</body>
</html>
Why it's all suddenly gone while i add this script :
<?php echo "<script>addIP(ip);</script>"; ?>
Is there anything wrong with my code ? Please Help
Upvotes: 2
Views: 1283
Reputation: 322
(Just in case: your html file needs to use .php as extension.) Try changing to:
<script type="text/javascript"> addIP(<?php echo $ip; ?>); </script>
On a side note: Something like this method of php in html will work fine but using a template engine would remove php code from display logic. Something like phpTal or one of the many others would be good to use. If you are only doing it for one value then don't bother with templating. but if you are dynamically creating html by using html in you php or php in your html then a template langue is what I would recommended.
Upvotes: 1
Reputation: 924
It looks like you're calling the addIP()
function with a variable called ip
that does not exist. I'm assuming you want to substitute that with the user's IP. To do this you would pass the IP address from PHP to Javascript with the following:
<?php echo '<script>addIP("' . $_SERVER['REMOTE_ADDR'] . '")</script>'; ?>
If you're testing locally it might output something like:
<script>addIP("::1")</script>
<script>addIP("127.0.0.1")</script>
<script>addIP("192.168.0.1")</script>
REMOTE_ADDR is not always reliable as it's sometimes the address of a proxy server the user is behind.
Upvotes: 2
Reputation: 28559
change from server call <?php echo "<script>addIP(ip);</script>"; ?>
to client call <script type="text/javascript"> addIP(ip); </script>
Upvotes: 1