मेरे पास एक फ़ाइल है जिसमें आईपी पते की एक सूची है यानी .:

1.1.1.1
2.2.2.2
3.3.3.3

मैं सूची में किसी आईपी को देश कोड से मिलान करने के लिए PHP "geoip_country_code_by_name" का उपयोग करता हूं और यदि कोई देश कोड मेल खाता है तो मैं देश कोड को प्रतिबिंबित करता हूं।

यह काम करता है लेकिन मैं जो करना चाहता हूं वह फ़ाइल में मेल खाने वाले आईपी यानी जीबी 1.1.1.1 को भी प्रतिबिंबित करता है और परिणामों को एक चर यानी $ मैच में भी सहेजता है

मेरे पास कौन सा कोड है इसका अवलोकन:

<?php

$ipfilename = "iplist.txt";
$contents = file($ipfilename);

foreach($contents as $line) {
  $country = geoip_country_code_by_name($line);
  if ($country == "GB") {
   echo $country;
   } 
}
?>

उम्मीद है कि यह समझ में आता है, यदि आवश्यक हो तो कोशिश करने और अधिक स्पष्ट करने में खुशी होगी।

मैंने PHP को देखने की कोशिश की है यह बाहर।

मैंने यह भी कोशिश की है:

<?php

$ipfilename = "iplist.txt";
$contents = file($ipfilename);

foreach($contents as $ip => $line) {
  $country = geoip_country_code_by_name($line);
  if ($country == "GB") {
   echo $country;
   echo print_r($ip);
   } 
}
?>

लेकिन यह प्रतिध्वनि देश कोड और सरणी संख्या/कुंजी यानी GB01 . से बाहर है

** संपादित करें **

कुछ प्रगति!

अब मैं इस कोड के साथ मेल खाने वाला देश कोड और आईपी प्राप्त कर सकता हूं:

<?php

$ipfilename = "iplist.txt";
$contents = file($ipfilename);

foreach($contents as $ip => $line) {
  $country = geoip_country_code_by_name($line);
  if ($country == "GB") {
   echo $country;
   echo " ";
   echo $line;
  }
}
?>

यह मुझे जीबी 1.1.1.1 देता है

अंतिम भाग के लिए मैं उन गूंज परिणामों को एक चर के रूप में कैसे सहेजूं? $मैच

0
confused 2 सितंबर 2021, 22:17

2 जवाब

सबसे बढ़िया उत्तर

तो मैंने आखिरकार यह किया:

<?php

$ipfilename = "iplist.txt";
$contents = file($ipfilename);

foreach($contents as $ip => $line) {
  $country = geoip_country_code_by_name($line);
  if ($country == "GB") {
   $match .= "$country $line \n";       
  }
}
echo "<br><br> $match <br><br>"; 
?>

जब आप $match को प्रतिध्वनित करते हैं तो यह आपको देता है:

जीबी 1.1.1.1

0
happymacarts 2 सितंबर 2021, 21:47

आपके आवेदन के लिए देश कोड और (मुझे लगता है) दोनों एक या एक से अधिक आईपी पते की आवश्यकता है जो उस देश से संबंधित हैं।

इस कारण से, लंबे समय में यह आपके डेटा संग्रहण को एक json फ़ाइल के रूप में संरचित करने के लिए कहीं अधिक कुशल होगा, जिसमें प्रथम स्तर की कुंजियाँ देश कोड और सबएरे में मौजूद सभी आईपी पते होंगी।

जब आपको किसी विशिष्ट देश से आईपी पते तक पहुंचने की आवश्यकता होती है, तो आपकी "पढ़ने" की प्रक्रिया बहुत तेज होगी।

$match = 'GB';
$ipArray = json_decode(file_get_contents('ip_lists_by_country.json'))->$match ?? [];

इस बिंदु से, आप var_export($ipArray) उस देश से संबंधित शून्य-या-अनेक आईपी पते देख सकते हैं। या यदि आप आईपी पतों की सरणी को लूप और प्रस्तुत करना चाहते हैं, तो यह इस तरह दिख सकता है:

foreach ($ipArray as $ip) {
    echo "<div>$match: $ip</div>";
}

Json फ़ाइल बनाने और बनाए रखने में थोड़ा अधिक प्रयास लगता है, लेकिन फिर भी अधिक नहीं।

  1. कंट्री स्ट्रिंग जेनरेट करने के लिए दिए गए आईपी पते का उपयोग करके geoip_country_code_by_name() पर कॉल करें।
  2. जेसन फ़ाइल खोलें और फ़ाइल को ऑब्जेक्ट के रूप में डीकोड करें (यदि आप सरणी के साथ काम करना पसंद करते हैं तो आप एक सरणी बना सकते हैं)।
  3. जाँच करें कि क्या देश लुकअप फ़ाइल में मौजूद नहीं है या यदि निर्दिष्ट देश के भीतर विशिष्ट आईपी पता नहीं मिला है।
  4. यदि नया आईपी पता फ़ाइल में संग्रहीत किया जाना चाहिए, तो नए तत्व को लक्षित उप-सरणी, json_encode() में धकेलें, और फिर मूल json फ़ाइल को स्वयं के नए संस्करण के साथ अधिलेखित कर दें। किया हुआ।

मैं इसकी अनुशंसा करता हूं:

$filename = 'ip_lists_by_country.json';
$newIP = '7.7.7.7';
$country = geoip_country_code_by_name($newIP);
$object = json_decode(file_get_contents($filename));
if (!isset($object->$country) || !in_array($newIP, $object->$country)) {
    $object->$country[] = $newIp;
    file_put_contents(json_encode($filename, $object));
}

ठीक है, चूंकि आईपी फ़ाइल आपके आवेदन के बाहर बनाए रखा एक संसाधन है और आईपी पते की एक बहुत ही छोटी सूची है, तो मैं शून्य या अधिक योग्यता वाले आईपी पते एकत्र करने के लिए वैकल्पिक फ़िल्टरिंग सिंटैक्स की पेशकश करूंगा।

$country = 'GB';
$ipsInCountry = array_filter(
    file('iplist.txt'),
    function($ip) use ($country) {
        return $country === geoip_country_code_by_name($ip);
    }
);
var_export($ipsInCountry);
0
mickmackusa 5 सितंबर 2021, 00:24