我希望这是我最后一次打扰好人。我是一个新手黑客,正在为一个网站的每个页面工作一个独特的点击计数器。我似乎让它正常工作,但在它第一次点击并将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);
?>
答案 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;
}