জাভাস্ক্রিপ্ট থেকে কোনও সার্ভার পিং করা সম্ভব?


152

আমি একটি ওয়েব অ্যাপ বানাচ্ছি যাতে প্রয়োজন হয় যে আমি দূরবর্তী সার্ভারগুলি অনলাইনে আছে কিনা তা পরীক্ষা করে দেখতে হবে। আমি যখন এটি কমান্ড লাইন থেকে চালিত করি, তখন আমার পৃষ্ঠার বোঝা পুরো 60 এর দশকে চলে যায় (8 টি প্রবেশের জন্য, এটি আরও রৈখিকভাবে স্কেল করবে)।

আমি ব্যবহারকারীর শেষের দিকে পিংয়ের পথে যাওয়ার সিদ্ধান্ত নিয়েছি। এইভাবে, আমি পৃষ্ঠাটি লোড করতে পারি এবং আমার সামগ্রীটি ব্রাউজ করার সময় তাদের "সার্ভারটি অনলাইনে রয়েছে" ডেটার জন্য অপেক্ষা করতে পারি।

উপরের প্রশ্নের উত্তর কারও কাছে থাকলে, বা আমার পৃষ্ঠাগুলি দ্রুতগতিতে চালিত রাখার কোনও সমাধান যদি তারা জানেন তবে আমি অবশ্যই এটির প্রশংসা করব।

উত্তর:


134

আমি এমন একজনকে পেয়েছি যিনি নেটিভ Imageঅবজেক্টের খুব চতুর ব্যবহারের সাথে এটি সম্পাদন করেন ।

তাদের উত্স থেকে, এটি মূল কাজ (এটি উত্সের অন্যান্য অংশের উপর নির্ভরশীলতা রয়েছে তবে আপনি ধারণাটি পাবেন)।

function Pinger_ping(ip, callback) {

  if(!this.inUse) {

    this.inUse = true;
    this.callback = callback
    this.ip = ip;

    var _that = this;

    this.img = new Image();

    this.img.onload = function() {_that.good();};
    this.img.onerror = function() {_that.good();};

    this.start = new Date().getTime();
    this.img.src = "http://" + ip;
    this.timer = setTimeout(function() { _that.bad();}, 1500);

  }
}

এটি আমি পরীক্ষিত (ওয়েব সার্ভার, এফটিপি সার্ভার এবং গেম সার্ভার) সমস্ত ধরণের সার্ভারগুলিতে কাজ করে। এটি বন্দরগুলির সাথেও কাজ করে। যদি কেউ ব্যর্থ হয় এমন কোনও ব্যবহারের ক্ষেত্রে মুখোমুখি হয় তবে দয়া করে মন্তব্যগুলিতে পোস্ট করুন এবং আমি আমার উত্তর আপডেট করব।

আপডেট : পূর্ববর্তী লিঙ্কটি সরানো হয়েছে। যদি কেউ উপরের সন্ধান করে বা প্রয়োগ করে তবে দয়া করে মন্তব্য করুন এবং আমি এটি উত্তরে যুক্ত করব।

আপডেট 2 : @ ট্রান্ট একটি জেএসফিডেল সরবরাহ করতে যথেষ্ট দুর্দান্ত ছিল।

http://jsfiddle.net/GSSCD/203/

আপডেট 3 : @ জোনাথন বাস্তবায়নের সাথে সাথে একটি গিটহাব রেপো তৈরি করেছে।

https://github.com/jdfreder/pingjs

আপডেট 4 : দেখে মনে হচ্ছে এই বাস্তবায়ন আর নির্ভরযোগ্য নয়। লোকেরা আরও জানায় যে ক্রোম আর এগুলি সমর্থন করে না, net::ERR_NAME_NOT_RESOLVEDত্রুটি ছুঁড়ে ফেলে । যদি কোনও বিকল্প সমাধান যাচাই করতে পারে তবে আমি এটিকে গ্রহণযোগ্য উত্তর হিসাবে রাখব।


48
এই আমি ব্যবহার করে যাচ্ছি। তবে এর একটি ত্রুটি রয়েছে এবং এটি হ'ল "চিত্র" ক্যাশে করা হয়েছে। আমি যখন প্রদত্ত আইপি শুরুতে পিং করি তখন আমি 304 এমএস পাই - তবে আমি যদি পুনরায় লোড ছাড়াই দ্বিতীয় বার এটি পিং করি তবে পরিবর্তে আমি 2 এমএস পাই get এটি "/?cachebreaker="+new Date().getTime();প্রয়োজনে img src এর শেষের দিকে যুক্ত করে এড়ানো যেতে পারে ।
মেশাল

2
এটি আমার পক্ষে কাজ করছে না, পিং অনুরোধে একটি খারাপ খারাপ হোস্টনেমের ফলাফল হোস্টকে খুঁজে পেল না ...। তবে অনারারটি যেহেতু 'ভাল' তাই বলেছে এটি প্রতিক্রিয়া জানিয়েছে
মাসলো

5
আরও পরীক্ষার মাধ্যমে জানা গেছে যে এটি সম্পূর্ণ অবিশ্বাস্য।
লিও

2
@ জোনাথন তৈরি করা পিং এপিআই সমস্ত কিছু সফলভাবে পিং করবে। যে সাইটগুলি বিদ্যমান নেই এবং এলোমেলো অক্ষর।
আইই 5 মাস্টার

2
পিং এপিআই আসলে সর্বদা অনাররারে ব্যর্থ হয়। তবুও যদি লক্ষ্য URL টি কোনও চিত্রকে চিহ্নিত করে তবে এটি ভারী ভারী গুলি চালায় যা দুর্দান্ত! বাইপাসগুলি সিওআরএস চেক।
মার্টিন

20

পিং আইসিএমপি, তবে রিমোট সার্ভারে যদি কোনও উন্মুক্ত টিসিপি পোর্ট থাকে তবে এটি এইভাবে অর্জন করা যেতে পারে:

function ping(host, port, pong) {

  var started = new Date().getTime();

  var http = new XMLHttpRequest();

  http.open("GET", "http://" + host + ":" + port, /*async*/true);
  http.onreadystatechange = function() {
    if (http.readyState == 4) {
      var ended = new Date().getTime();

      var milliseconds = ended - started;

      if (pong != null) {
        pong(milliseconds);
      }
    }
  };
  try {
    http.send(null);
  } catch(exception) {
    // this is expected
  }

}


আমি এই জটিল সমাধান পছন্দ। কোনও নম্বর ফিরিয়ে দেওয়ার পরিবর্তে পংয়ের জন্য একটি ক্রিয়াকলাপ সরবরাহ করা আমার কাছে কিছুটা বিশ্রী তবে কার্যক্ষম work
নিক

@ আরম্যান: আপনাকে পিংয়ের তৃতীয় যুক্তি হিসাবে কোনও ফাংশন সরবরাহ করতে হবে (), এই যুক্তির মানটিকে ফাংশনের মধ্যে পং বলা হয়।
শেষ হয়েছে

2
ping("example.com", "77", function(m){ console.log("It took "+m+" miliseconds."); })..... উদাহরণ কল
jave.web

@ নিক: এটি অ্যাসিনক্রোনাস স্টাফ, সুতরাং পদ্ধতিটি ফিরে আসার সময়, onreadystatechangeএখনও বরখাস্ত হয়নি। এর অর্থ যখন রাষ্ট্র পরিবর্তন হয় তখন আপনাকে পঠানোর জন্য কলব্যাকের প্রয়োজন।
অবাক

আমি হোস্টের জন্য যা কিছু বেছে নাও, পং () বলা হয়। পিং ( test.zzzzzzzzz, "77", ফাংশন (এম) so কনসোল.লগ ("এটি" + মি + "মিলি সেকেন্ড নিয়েছে));})" এটি 67 মিলিসেকেন্ড নিয়েছে ”" প্রিন্ট করে পিং ( stackoverflow.com, "80", ফাংশন (এম) so কনসোল.লগ ("এটি" + মি + "মিলি সেকেন্ড নিয়েছে));}) একটি কর্ড-ত্রুটি দেয়: বিকাশকারী.মোজিলা.আর.ইন- ইউএস / ডকস / ওয়েব / এইচটিটিপি / সিওআরএস / ত্রুটিগুলি /… আমি যদি কোনও দূরবর্তী কম্পিউটার অনলাইনে থাকে তবে এই কোডটি দিয়ে কীভাবে চেক করতে পারি তা আমি দেখতে পাই না।
টাক্স

18

আপনি এটি চেষ্টা করতে পারেন:

করা ping.html সহ বা কোনো সামগ্রী ছাড়া সার্ভারে জাভাস্ক্রিপ্ট নিচের মত একই করুন:

<script>
    function ping(){
       $.ajax({
          url: 'ping.html',
          success: function(result){
             alert('reply');
          },     
          error: function(result){
              alert('timeout/error');
          }
       });
    }
</script>

1
যে সার্ভারগুলি আমি পিং করছি তা আমার নিজস্ব নয়, সুতরাং আমার কাছে বিকল্প নেই। ধন্যবাদ যদিও.
চক Callebs

9
@ ডিএলচ্যাম্বারস সিআরএসের পাওনা নয় তবে ডোমেন পলিসি পার করার অধিকার রয়েছে। সিওআরএস একটি সার্ভারকে উত্স নির্দিষ্ট করার অনুমতি দেয় এবং এটি ব্রাউজারের দ্বারা সমর্থিত হয়। সুতরাং এটি ক্রস ডোমেন ইস্যুর মতো।
রই নমির

হেড প্রকারের অনুরোধগুলি কারসের কারণেও কাজ করবে না। ক্রোমিয়াম 55 এর সাথে পরীক্ষিত net নেট হিসাবে যেমন HT কোড 0 0 এর সাথে একই ত্রুটি পাওয়া: উদাহরণস্বরূপ CONNECTION_REFUSED।
মার্টিন ভিসনি

এটি নিখুঁতভাবে ক্রস ব্রাউজার।
গ্যাব্রিয়েল

14

আপনি সরাসরি জাভাস্ক্রিপ্টে "পিং" করতে পারবেন না। আরও কয়েকটি উপায় থাকতে পারে:

  • আয়াক্স
  • ইস্রাচ্যাবলের সাথে একটি জাভা অ্যাপলেট ব্যবহার করা
  • আপনার সার্ভারসাইড স্ক্রিপ্টে যোগাযোগ করার জন্য যা সার্ভারসাইড স্ক্রিপ্ট লিখেছেন এবং এটিজ্যাক ব্যবহার করছেন using
  • আপনি ফ্ল্যাশ পিন করতে সক্ষম হতে পারে (ক্রিয়া স্ক্রিপ্ট)

1
জাভা এর isreachable বেশ অবিশ্বাস্য .... তবে ভাল এটি 2018 এবং জাভা অ্যাপলেটগুলি যাইহোক পুরানো হয়।
dreua

8

আপনি ব্রাউজার জাভাস্ক্রিপ্টে নিয়মিত পিং করতে পারবেন না, তবে দূরবর্তী সার্ভার থেকে কোনও চিত্র লোড করে উদাহরণস্বরূপ দূরবর্তী সার্ভারটি বেঁচে আছে কিনা তা আপনি জানতে পারবেন। লোড যদি ব্যর্থ হয় -> সার্ভার ডাউন।

এমনকি লোড হওয়ার সময়টিকে অনলোড-ইভেন্ট ব্যবহার করে গণনা করতে পারেন। কীভাবে ওভারলোড ইভেন্টটি ব্যবহার করবেন তা এখানে একটি উদাহরণ


4
সে সম্পর্কে দুর্ভাগ্যজনক বিষয়টি হল যে সার্ভারগুলি আমি পিং করছি তা হ'ল ওয়েব সার্ভার নয়। তারা গেম সার্ভার।
চক ক্যাললেব

1
তারপরে আপনাকে সার্ভারের পাশে পিং করতে হবে - অথবা আপনি কিছু হালকা ওজনের HTTP- সার্ভার বিবেচনা করতে পারেন।
এপেলি

আপনি কি সামগ্রিক পিংস করার কোনও উপায় জানেন? এটি আমার মূল মন্দা, অন্যটি শুরু হওয়ার আগে একটি অনুরোধ শেষ হওয়ার অপেক্ষায়।
চক ক্যাললেব

আপনাকে একই সাথে সার্ভারগুলিকে পিং করতে হবে। আপনি এটি নির্বাচন, থ্রেড বা প্রক্রিয়া সহ অর্জন করতে পারেন। সত্যিই কঠিন সমাধানের জন্য আপনি ইভেন্টম্যাচিন ব্যবহার করতে পারেন।
এপেলি

1
আপনি কমান্ড-লাইন pingকমান্ডের সুবিধা গ্রহণ করতে পারেন । এটি শিল্প শক্তি। বা, কোনও হোস্ট বিভিন্ন ধরণের হার্টবিট চেক ব্যবহার করে চলছে কিনা তা নিরীক্ষণ করার জন্য সমস্ত ধরণের বিনামূল্যে / ওপেন সোর্স অ্যাপ্লিকেশন রয়েছে।
টিন ম্যান

7

ওয়েবসকেট সমাধান সহ পিচিং করা হচ্ছে ...

function ping(ip, isUp, isDown) {
  var ws = new WebSocket("ws://" + ip);
  ws.onerror = function(e){
    isUp();
    ws = null;
  };
  setTimeout(function() { 
    if(ws != null) {
      ws.close();
      ws = null;
      isDown();
    }
  },2000);
}

isUp();কলটি onopenইভেন্ট হ্যান্ডলারে থাকা উচিত নয় ? :)
jave.web

1
এটি ওয়েবসকেট প্রোটোকল ব্যবহার করে তবে ধরে নেওয়া হয় যায় যে কোনও সংযোগের জন্য অপেক্ষা করা কোনও ওয়েবসকেট সার্ভার আসলে নেই। এটি কেবল 'কোনও পুরানো আইপি' পিং করার জন্য।
অ্যান্টনি উডস

তবে আপনি কীভাবে সনাক্ত করতে পারবেন যে ওয়েবস্কট কেবল সমর্থিত নয় বা সত্যিই কিছু ত্রুটি ছিল? :)
jave.web

যদি মনে হয় তুমি একটি IP যে ping করার অপয়া যথেষ্ট হবেন পারে বন্দর 80 এ একটি WebSocket সংযোগ স্বীকার, তারপর হ্যাঁ, আপনি উচিত এছাড়াও যোগ isUp();যে কলব্যাক করার। অথবা একটি স্বতন্ত্রভাবে নন-ওয়েবসকেট-ওয়াই পোর্ট যুক্ত করে এটিকে প্রশমিত করুন।
অ্যান্টনি উডস

আমি এটিকে ভোট দিয়েছি কারণ আমার ওয়েবসকেট সার্ভারটি রিবুট হয়ে গেলে কী ঘটে যায় তার সমাধানের সন্ধান করতে আমি এখানে এসেছি এবং এই উত্তরটি আমাকে দেখিয়েছিল যে আমি সকেটের ত্রুটি হ্যান্ডলারটিতে টাইমআউট সেট করতে পারি এবং পুনরায় সংযোগ করার চেষ্টা করতে পারি (ব্যস্ত অপেক্ষা)। সম্ভবত সেরা অনুশীলন না, তবে আমার সমস্যা সমাধান করে। :)
mynameisnafe

6

আপনার অনুরোধগুলি দ্রুত রাখার জন্য, পিংয়ের সার্ভারের পাশের ফলাফলগুলি ক্যাশে করুন এবং প্রতি কয়েক মিনিট পরে পিং ফাইল বা ডাটাবেস আপডেট করুন (বা আপনি সঠিক হতে চান তবে এটি সঠিক)। আপনি আপনার 8 টি পিংসের সাথে শেল কমান্ড চালানোর জন্য ক্রোন ব্যবহার করতে পারেন এবং কোনও ফাইলে আউটপুট লিখতে পারেন, ওয়েবসার্ভার আপনার ফাইলের মধ্যে এই ফাইলটি অন্তর্ভুক্ত করবে।


আমি মনে করি সঠিক ফলাফলের পক্ষে এটি সর্বোত্তম নির্ভরযোগ্য উপায়। তবে এখনও এটির জন্য সার্ভারে কিছু কাজ করা দরকার আমি বলব এটি স্মার্ট উপায় নয়।
চিতাবাহন

5

আপনি যা যা দেখতে চেষ্টা করছেন তা যদি সার্ভারটি "উপস্থিত" থাকে কিনা তা হলে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

function isValidURL(url) {
    var encodedURL = encodeURIComponent(url);
    var isValid = false;

    $.ajax({
      url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodedURL + "%22&format=json",
      type: "get",
      async: false,
      dataType: "json",
      success: function(data) {
        isValid = data.query.results != null;
      },
      error: function(){
        isValid = false;
      }
    });

    return isValid;
}

এটি সার্ভার বিদ্যমান কিনা তা সত্য / মিথ্যা ইঙ্গিত দেয়।

আপনি যদি প্রতিক্রিয়া সময় চান, একটি সামান্য পরিবর্তন করতে হবে:

function ping(url) {
    var encodedURL = encodeURIComponent(url);
    var startDate = new Date();
    var endDate = null;
    $.ajax({
      url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodedURL + "%22&format=json",
      type: "get",
      async: false,
      dataType: "json",
      success: function(data) {
        if (data.query.results != null) {
            endDate = new Date();
        } else {
            endDate = null;
        }
      },
      error: function(){
        endDate = null;
      }
    });

    if (endDate == null) {
        throw "Not responsive...";
    }

    return endDate.getTime() - startDate.getTime();
}

ব্যবহারটি তখন তুচ্ছ:

var isValid = isValidURL("http://example.com");
alert(isValid ? "Valid URL!!!" : "Damn...");

বা:

var responseInMillis = ping("example.com");
alert(responseInMillis);

যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে।
ভনব্র্যান্ড

1
এটি একটি দুর্দান্ত সমাধান, তবে দুর্ভাগ্যক্রমে, ইয়াহু ডোমেন ক্যোয়ারী পরিষেবাটি পরিবর্তনশীল ফলাফল বলে মনে হচ্ছে। উদাহরণস্বরূপ, যদি আপনি নীচের ইউআরএলগুলি চেষ্টা করেন তবে শুরু করুন ডাউনলোড শুরু করুন। কম বিফারডাউনলোড। কম তারা নিবন্ধীকৃত হিসাবে ফিরে আসে, তবে আপনি যদি এই ইউআরএলগুলিতে যান তবে সেগুলি স্পষ্টভাবে নিবন্ধিত রয়েছে। কোন ধারণা এখানে কি চলছে? (আমি এই উদাহরণগুলিতে ডোমেনের নামগুলিতে একটি জায়গা যুক্ত করেছি, কেবল গুগল রস দেওয়া এড়াতে my আমার পরীক্ষায় আমার
সেগুলিতে

আপনি ইয়াহুকে অনুরোধ করছেন! আপনি যদি নিজের মেশিন থেকে অনুরোধ করেন তবে এপিআই, পিং এমনকি একই হবে না। এটি কোনও
আন্দ্রে ফিগুয়েরেডো

এই কারণ No 'Access-Control-Allow-Origin' header is present on the requested resource. Originএবং সাফল্য কলব্যাক কখনও বলা হয় না
ভ্লাদক্রাস

4

স্ট্যান্ডার্ড পিংসের সমস্যাটি হ'ল তারা আইসিএমপি, যা সুরক্ষা এবং ট্র্যাফিক কারণে প্রচুর জায়গা দেয় না । এটি ব্যর্থতার ব্যাখ্যা দিতে পারে।

1.9 এর আগে রুবির একটি টিসিপি-ভিত্তিক ছিল ping.rb, যা রুবি 1.9+ দিয়ে চলবে run আপনাকে যা করতে হবে তা হ'ল এটির 1.8.7 ইনস্টলেশন থেকে অন্য কোথাও অনুলিপি করা। আমি কেবল নিশ্চিত করেছি যে এটি আমার হোম রাউটারটি পিং করে চালানো হবে।


4

এখানে অনেকগুলি পাগল উত্তর রয়েছে এবং বিশেষত কর্স সম্পর্কে -

আপনি একটি HT হেড অনুরোধ করতে পারেন (যেমন জিইটি তবে পে-লোড ছাড়াই)। দেখাHttps://ochronus.com/http-head-request-good-uses/

এটি প্রিফ্লাইট চেকের দরকার নেই, বিভ্রান্তির কারণটি নির্দিষ্টকরণের পুরানো সংস্করণের কারণে, দেখুন ক্রস-অরিজিন হেড অনুরোধের কেন একটি প্রিফলাইট চেক প্রয়োজন?

সুতরাং আপনি উপরে যে উত্তরটি jQuery লাইব্রেরি ব্যবহার করছেন তা ব্যবহার করতে পারেন (এটি বলেননি) তবে সাথে

type: 'HEAD'

--->

<script>
    function ping(){
       $.ajax({
          url: 'ping.html',
          type: 'HEAD',
          success: function(result){
             alert('reply');
          },     
          error: function(result){
              alert('timeout/error');
          }
       });
    }
</script>

অবশ্যই আপনি ভ্যানিলা জেএস বা ডোজো বা যা কিছু ব্যবহার করতে পারেন ...


1
হেড অনুরোধ প্রেরণ করা এখনও ব্যর্থ হয় "XMLHttpRequest আইপি লোড করতে পারে না requested তাই সিওআরএস দ্বারা অবরুদ্ধ। আপনি HTTP স্থিতি 0 দিয়ে সাফল্য পাবেন এবং আপনি নেট থেকে এটি আলাদা করতে সক্ষম হবেন না: ERR_CONNECTION_REFUSED উদাহরণস্বরূপ
মার্টিন

0

আমি জানি না আপনি রুবির কোন সংস্করণটি চালাচ্ছেন, তবে আপনি জাভাস্ক্রিপ্টের পরিবর্তে রুবির জন্য পিং প্রয়োগের চেষ্টা করেছেন? http://raa.ruby-lang.org/project/net-ping/


হ্যাঁ, আমি চেষ্টা করেছি কিন্তু ওয়েব সার্ভার নির্বিশেষে পিংগুলি সর্বদা মিথ্যা বলে ফিরে আসে। আমি এটি পরিবর্তন করে কেবল ping server.comসিনট্যাক্স ব্যবহার করেছি ।
চক ক্যাললেব

-1
let webSite = 'https://google.com/' 
https.get(webSite, function (res) {
    // If you get here, you have a response.
    // If you want, you can check the status code here to verify that it's `200` or some other `2xx`.
    console.log(webSite + ' ' + res.statusCode)
}).on('error', function(e) {
    // Here, an error occurred.  Check `e` for the error.
    console.log(e.code)
});;

আপনি যদি নোড দিয়ে এটি চালান তবে গুগল ডাউন না হওয়া পর্যন্ত এটি 200 লগ কনসোল করবে।


না, এটি নয় ... 1) আপনি নিখোঁজ হচ্ছেন, 2) এটি 301 স্থায়ীভাবে সরানো হয়েছে: ডি
মিশাল মিকি জাঙ্কোভস্কে

-1
const ping = (url, timeout = 6000) => {
  return new Promise((reslove, reject) => {
    const urlRule = new RegExp('(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]');
    if (!urlRule.test(url)) reject('invalid url');
    try {
      fetch(url)
        .then(() => reslove(true))
        .catch(() => reslove(false));
      setTimeout(() => {
        reslove(false);
      }, timeout);
    } catch (e) {
      reject(e);
    }
  });
};

এটি ব্যবহার করুন:

ping('https://stackoverflow.com/')
  .then(res=>console.log(res))
  .catch(e=>console.log(e))

-4

আপনি ফলোভিং ব্যবহার করে জাভাস্ক্রিপ্ট থেকে ডস পিং.এক্সই কমান্ডটি চালাতে পারেন:

function ping(ip)
{
    var input = "";
    var WshShell = new ActiveXObject("WScript.Shell");
    var oExec = WshShell.Exec("c:/windows/system32/ping.exe " + ip);

    while (!oExec.StdOut.AtEndOfStream)
    {
            input += oExec.StdOut.ReadLine() + "<br />";
    }
    return input;
}

এটি কি এর জন্য জিজ্ঞাসা করা হয়েছিল, বা আমি কিছু মিস করছি?


4
এটি দুর্ভাগ্যক্রমে এবং শুধুমাত্র একটি উইন্ডোজ সার্ভারে কেবলমাত্র IE এ কাজ করবে। একটি ভাল বিকল্পটি সার্ভার সাইড স্ক্রিপ্টটি চালানোর জন্য এজেএক্স ব্যবহার করা হবে।
অ্যান্ড্রু গ্রোথ

কি হ্যাক? অ্যাক্টিভ এক্স অবজেক্টগুলি ব্যবহারকারীর ফাইল সিস্টেমে কার্যকর করতে পারে (উইন সার্ভারের আইআই তে)? আমি অ্যাক্টিভএক্সের সাথে কাজ করি নি তবে কল্পনাও করি নি ...
জুলিক্স

-6

শুধু প্রতিস্থাপন

file_get_contents

সঙ্গে

$ip = $_SERVER['xxx.xxx.xxx.xxx'];
exec("ping -n 4 $ip 2>&1", $output, $retval);
if ($retval != 0) { 
  echo "no!"; 
} 
else{ 
  echo "yes!"; 
}

1
নতুন 'আংশিক' এক যুক্ত করার পরিবর্তে আপনার নিজের আগের উত্তরটি সম্পাদনা করা উচিত ।
আর্টেমিক্স

-8

এটি সব চেয়ে অনেক সহজ হতে পারে। আপনি যদি নিজের পৃষ্ঠাটি লোড করতে চান তবে অন্যান্য ওয়েব পৃষ্ঠার ক্রিয়াকলাপটি ট্রিগার করতে কোনও বিদেশী পৃষ্ঠার প্রাপ্যতা বা বিষয়বস্তুটি পরীক্ষা করে দেখুন, আপনি কেবল জাভাস্ক্রিপ্ট এবং এই জাতীয় পিএইচপি ব্যবহার করে এটি করতে পারেন।

yourpage.php

<?php
if (isset($_GET['urlget'])){
  if ($_GET['urlget']!=''){
    $foreignpage= file_get_contents('http://www.foreignpage.html');
    // you could also use curl for more fancy internet queries or if http wrappers aren't active in your php.ini
    // parse $foreignpage for data that indicates your page should proceed
    echo $foreignpage; // or a portion of it as you parsed
    exit();  // this is very important  otherwise you'll get the contents of your own page returned back to you on each call
  }
}
?>

<html>
  mypage html content
  ...

<script>
var stopmelater= setInterval("getforeignurl('?urlget=doesntmatter')", 2000);

function getforeignurl(url){
  var handle= browserspec();
  handle.open('GET', url, false);
  handle.send();
  var returnedPageContents= handle.responseText;
  // parse page contents for what your looking and trigger javascript events accordingly.
  // use handle.open('GET', url, true) to allow javascript to continue executing. must provide a callback function to accept the page contents with handle.onreadystatechange()
}
function browserspec(){
  if (window.XMLHttpRequest){
    return new XMLHttpRequest();
  }else{
    return new ActiveXObject("Microsoft.XMLHTTP");
  }
}

</script>

যা করা উচিৎ.

ট্রিগার হওয়া জাভাস্ক্রিপ্টে ক্লিয়ারইন্টারভাল (স্টপমিলেটার) অন্তর্ভুক্ত করা উচিত

যে আপনার জন্য কাজ করে আমাকে

জার্মান


2
যেমনটি আমি আগেই বলেছি, এটি ওয়েব সার্ভার নয় যা আমি পিং করছি। এগুলি গেম সার্ভারগুলি। তারা এইচটিটিপি অনুরোধের জবাব দেবে না। :(
চক কল্লেবস

ডুড, কেবল ফাইল_জেট_কন্টেন্টগুলি এর সাথে প্রতিস্থাপন করুন
জেরি উইকি

$ আইপি = $ _SERVER ['127.0.0.1']; এক্সিকিউটিভ ("পিং -n 4 ip 2> & 1", $ আউটপুট, $ রিটাল); যদি (val retval! = 0) cho প্রতিধ্বনি "না!"; } অন্য {প্রতিধ্বনি "হ্যাঁ!"; }
জেরি উইকি

4
এটি কোনও পিএইচপি প্রশ্ন নয়। এটি একটি জাভাস্ক্রিপ্ট প্রশ্ন। আমি পিএইচপি ব্যবহার করি না।
চক ক্যাললেবস

1
দয়া করে আপনার পোস্টগুলিতে স্বাক্ষর বা ট্যাগলাইন ব্যবহার করবেন না বা সেগুলি সরানো হবে। বিশদ জানতে FAQ দেখুন ।
আর্টেমিক্স

-13

আপনি নিজের ওয়েব পৃষ্ঠায় পিএইচপি ব্যবহার করার চেষ্টা করতে পারেন ... এরকম কিছু:

<html><body>
<form method="post" name="pingform" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<h1>Host to ping:</h1>
<input type="text" name="tgt_host" value='<?php echo $_POST['tgt_host']; ?>'><br>
<input type="submit" name="submit" value="Submit" >
</form></body>
</html>
<?php

$tgt_host = $_POST['tgt_host'];
$output = shell_exec('ping -c 10 '. $tgt_host.');

echo "<html><body style=\"background-color:#0080c0\">
<script type=\"text/javascript\" language=\"javascript\">alert(\"Ping Results: " . $output . ".\");</script>
</body></html>";

?>

এটি পরীক্ষা করা হয় না সুতরাং এটিতে টাইপস ইত্যাদি থাকতে পারে ... তবে আমি বিশ্বাস করি এটি কার্যকর হবে। খুব উন্নত করা যেতে পারে ...


5
ওপি'র ট্যাগগুলির মতে এটি আসলে রেল অন রেল প্রশ্ন, সুতরাং পিএইচপি ব্যবহার করা ভাল সমাধান নয়।
টিন ম্যান

1
এখানে কোনও যুক্তি শুরু করার জন্য নয় তবে এই ফোরামের বিন্দুটি কী সহায়তা করবে না?
ক্রিস

5
@ ক্রিস এটি হ'ল, তবে আপনি পিপিএফ কোড সরবরাহ করে তার অ্যাপ্লিকেশনটিতে রুবি এবং জেএস ব্যবহারকারী ওপিকে কী ধরনের সহায়তা দিয়েছেন?
বাইফোব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.