如果找不到图像,则每次增加而不是显示新图像

时间:2014-07-23 03:29:19

标签: php html json function logging

我正在使用此功能获取双字母国家/地区代码:

$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标记,并且每次都会增加。

任何帮助将不胜感激!

3 个答案:

答案 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)

非常简单地添加休息时间; 回显未知标志后的语句,以便您可以退出循环。