我正在使用此功能获取双字母国家/地区代码:
$ipaddress = $_SERVER['REMOTE_ADDR'];
function ip_details($ip) {
$json = file_get_contents("http://ipinfo.io/{$ip}");
$details = json_decode($json);
return $details;
}
输出:
US // Two-letter Country Code
要在文件中创建日志,我使用了这个:
$pathVisitorsFile = 'visitors.txt'; // file path
$details = ip_details($ipaddress);
file_put_contents($pathVisitorsFile, $details->country . PHP_EOL, FILE_APPEND);
阅读参赛作品:
$visitorsCountry = file($pathVisitorsFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// Count entries
$foundCountries = array();
foreach($visitorsCountry as $visitorCountry) {
if(!isset($foundCountries[$visitorCountry])) {
$foundCountries[$visitorCountry] = 1;
} else {
$foundCountries[$visitorCountry]++;
}
}
要显示标记,我有:
foreach($foundCountries as $countryCode => $visitors) {
$file_to_check="img/$countryCode.png"; // image path
if (file_exists($file_to_check)){
echo('<li><img src="' . $file_to_check . '" />' . $visitors . '</li>');
} else {
echo('<li><img src="images/unknown.png" />' . $visitors . '</li>');
}
}
情况:我使用forloop
来显示国家/地区标记,只有当两个字母的国家/地区代码不同且不存在时,才会创建新的<li>
。否则,它会递增它。
问题:我没有很多国家/地区代码的图片,因此我使用file_exists($file_to_check)
功能显示unknown.png
标记,如果国家/地区代码的图像不存在。现在,如果国家/地区代码不同且图像不存在,则会为每个代码显示相同的未知标记。 我希望它只显示1个unknown.png
标记,并且每次都会增加。
任何帮助将不胜感激!
答案 0 :(得分:1)
您可以将没有标记的国家/地区的国家/地区代码设置为&#34; unknown&#34;,并不断增加计数器。完成所有国家/地区代码检查后,您可以输出生成的HTML,如下所示:
保存到demo.php,chmod + x demo.php&amp;&amp; ./demo.php
#!/usr/bin/php
<?php
$foundCountries = array(
'US' => 10,
'UK' => 5,
'RU' => 12,
'CA' => 21,
);
$unknownVisitors = 0; //separate counter for "unknown" visitors
$html = array(); //array to store generated html
//loop through and generate the html, putting all countries that don't have a flag image/
//into the "unknown" country code.
//this could be optimized further, having only one line that generates all of the html by
//setting the value of $file_to_check to whatever image you want to use.
foreach($foundCountries as $countryCode => $visitors) {
$file_to_check="img/$countryCode.png"; // image path
if (file_exists($file_to_check)){
$html[$countryCode] = '<li><img src="' . $file_to_check . '" />' . $visitors . '</li>'; //fixed a slight bug(?) in the original code that generated "img/$countryCode.png$countryCode"
} else {
$unknownVisitors += $visitors;
$html['unknown'] = '<li><img src="images/unknown.png" />' . $unknownVisitors . '</li>';
}
}
//output the html
foreach($html as $cc => $code)
echo "$code" . PHP_EOL;
示例输出:
<li><img src="img/US.png" />10</li>
<li><img src="img/UK.png" />5</li>
<li><img src="images/unknown.png" />33</li>
答案 1 :(得分:0)
在数据库中创建名为Visitor_Counter的列或沿着这些行的某些内容。
现在,每次调用此php函数时,您将运行自动增量,因此我们需要先SELECT
数据库(MYSQLI)。
if ($query= $mysqli->query("SELECT Visitor_Counter FROM DATABASE ")) {
printf("Select returned %d rows.\n", $query->num_rows);
一旦我们选择了这些,我们需要在PHP中创建增量代码。
if ($result = $mysqli->query($query)) {
/* fetch associative array */
while ($row = $result->fetch_assoc()) {
printf ("%s (%s)\n", $row["Visitor_Counter"], $row["Country"]);
}
$next_auto_inc = $row['Visitor_Counter'] + 1;
我不确定这是否100%正确,但这是在我脑海中,正确:)
答案 2 :(得分:-1)
非常简单地添加休息时间; 回显未知标志后的语句,以便您可以退出循环。