PHP死掉了一切。我还能用什么?

时间:2013-12-06 13:35:57

标签: php

我希望这是我最后一次打扰好人。我是一个新手黑客,正在为一个网站的每个页面工作一个独特的点击计数器。我似乎让它正常工作,但在它第一次点击并将IP添加到文件后,它会停止整个页面加载刷新或返回。我知道问题在于'die'语句结束了检查IP的循环。我也试过'休息'和'退出',但同样的事情发生了。我搜索了其他任何东西,但我找不到任何东西。有没有办法摆脱PHP代码而不停止加载其他所有东西?提前谢谢。

<?php

//  Declare string names
        $ip_file = "ip_index.txt"; 

//  get ip address of user      
    $user_ip = $_SERVER['REMOTE_ADDR'];
    $ip_handle = fopen($ip_file, "r");

    while (!feof($ip_handle) ) {

    $line_of_text = fgets($ip_handle);
    $ip = trim($line_of_text);

    if ($user_ip==$ip){

        die();
        }   
    }
    $count_file = 'count_index.txt';

//  read contents of count.txt
    $count_file = "count_index.txt";

    ini_set('display_errors', 'On');
        error_reporting(E_ALL);

    $handle = fopen($count_file, "r");
    $old_count=fgets($handle);
    fclose($handle);

//  write contents of count.txt

    $fp = fopen($count_file, 'ab');
    if (false === $fp) {
    throw new RuntimeException('Unable to open log file for writing');
    }

    $handle = fopen($count_file, "w");  
    $new_count = $old_count +1;
    fwrite($handle, $new_count);
    fclose($handle);

//  write new IP to ip.txt file

    $fp = fopen($ip_file, 'r');
    if (false === $fp) {
    throw new RuntimeException('Unable to open log file for writing');
    }

    $handle = fopen($ip_file, 'a+');    
    $w_user_ip=$user_ip . "\n";

    fwrite($handle, $w_user_ip);
    fclose($handle);

?>

5 个答案:

答案 0 :(得分:1)

不确定你的意思。您可以反转if块的条件,然后将剩余的代码包装在大括号中。

例如

if ($user_ip != $ip) {
    $count_file = 'count_index.txt';

    // read contents of count.txt
    $count_file = "count_index.txt";

    // ... etc

    }   
}

答案 1 :(得分:1)

找到匹配项时不要退出整个脚本,只需退出循环即可。设置一个变量,允许您跳过增加唯一命中计数器的代码。

$ip_exists = false;
while (!feof($ip_handle) ) {

    $line_of_text = fgets($ip_handle);
    $ip = trim($line_of_text);

    if ($user_ip==$ip){
        $ip_exists = true;
        break;
    }   
}

if (!$ip_exists) {
    // Update all the files
    ...
}

答案 2 :(得分:0)

当你有:

if ($user_ip==$ip){
    die();
}

如果else{}块中的IP相同,则放置您不想运行的所有内容

答案 3 :(得分:0)

这样做:

....

if ($user_ip != $ip) {
    $count_file = 'count_index.txt';

//  read contents of count.txt
    $count_file = "count_index.txt";

    ini_set('display_errors', 'On');
    error_reporting(E_ALL);

    $handle = fopen($count_file, "r");
    $old_count=fgets($handle);
    fclose($handle);

//  write contents of count.txt

    $fp = fopen($count_file, 'ab');
    if (false === $fp) {
        throw new RuntimeException('Unable to open log file for writing');
    }

    $handle = fopen($count_file, "w");  
    $new_count = $old_count +1;
    fwrite($handle, $new_count);
    fclose($handle);

//  write new IP to ip.txt file

    $fp = fopen($ip_file, 'r');
    if (false === $fp) {
        throw new RuntimeException('Unable to open log file for writing');
    }

    $handle = fopen($ip_file, 'a+');    
    $w_user_ip=$user_ip . "\n";

    fwrite($handle, $w_user_ip);
    fclose($handle);
}

答案 4 :(得分:0)

如果其他代码包含此内容,您可以使用return

if ($user_ip==$ip){
    return;
}  

这将停止进一步执行你的脚本,但代码包括不会死。

另一方面,如果你想终止while循环,那么break就是你所需要的(使用它时你遇到了什么问题?)

if ($user_ip==$ip){
    break;
}