How to call Javascript API to Get IP Address in PHP Function?

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

Answers (3)

cmp-202
cmp-202

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

Ryan Jenkin
Ryan Jenkin

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

LF-DevJourney
LF-DevJourney

Reputation: 28559

change from server call <?php echo "<script>addIP(ip);</script>"; ?> to client call <script type="text/javascript"> addIP(ip); </script>

Upvotes: 1

Related Questions