2

I have tried a PHP script but it always gives me an error. I have added the script into my .htaccess to auto-load everytime.

php_value auto_prepend_file /var/www/fantasycf/public/proxycheck.php

No matter what I try, I receive this error:

Sat Jan 07 06:40:04.756520 2017] [php7:error] [pid 5269] [client 187.57.43.66:23391] PHP Fatal error:  Cannot redeclare checkProxy() (previously declared in /var/my/private/directory/proxycheck.php:11) in /var/my/private/directory/proxycheck.php on line 11, referer: http://test.com/test.html

My PHP script is the following:

    <?php
/*
* A PHP function that interacts with http://getIPIntel.net to look up an IP address
* returns TRUE if the IP returns a value greater than $banOnProability,
* FALSE otherwise, including errors
* HTTP error codes are NOT explicitly implemented here
* This should be used as a guide, be sure to edit and test it before using it in production
* MIT License
*/
//function requires curl
function checkProxy($ip){
    $contactEmail="admin@mysite.com"; //you must change this to your own email address
    $timeout=5; //by default, wait no longer than 5 secs for a response
    $banOnProbability=0.99; //if getIPIntel returns a value higher than this, function returns true, set to 0.99 by default

    //init and set cURL options
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    //if you're using custom flags (like flags=m), change the URL below
    curl_setopt($ch, CURLOPT_URL, "http://check.getipintel.net/check.php?ip=$ip&contact=$contactEmail");
    $response=curl_exec($ch);

    curl_close($ch);


    if ($response > $banOnProbability) {
        return true;
    } else {
        if ($response < 0 || strcmp($response, "") == 0 ) {
            //The server returned an error, you might want to do something
            //like write to a log file or email yourself
            //This could be true due to an invalid input or you've exceeded
            //the number of allowed queries. Figure out why this is happening
            //because you aren't protected by the system anymore
            //Leaving this section blank is dangerous because you assume
            //that you're still protected, which is incorrect
            //and you might think GetIPIntel isn't accurate anymore
            //which is also incorrect.
            //failure to implement error handling is bad for the both of us
        }
        return false;
    }
}
$ip=$_SERVER['REMOTE_ADDR'];
if (checkProxy($ip)) {
    /* A proxy has been detected based on your criteria
     * Do whatever you want to here
     */
    echo '<META HTTP-EQUIV="Refresh" Content="0; URL=google.com">';    
    exit;
}

?>

I hope you can help.

Kind regards.

Dayum
  • 41
  • 1
  • 5

2 Answers2

1

This problem happens when using require or include twice. This can be solved by finding all the instances of include and require that use that file and make sure you change it using:

require_once "filename";

The alternate way is to check if the function is already declared, if so, don't redeclare. You can do it by using function_exists():

if (!function_exists("checkProxy")) {
  function checkProxy($ip) {
    // rest of function code
  }
}
Praveen Kumar Purushothaman
  • 164,888
  • 24
  • 203
  • 252
0

Put your function declaration inside if statement

if(!function_exists('checkProxy'))
{
    /*
* A PHP function that interacts with http://getIPIntel.net to look up an IP address
* returns TRUE if the IP returns a value greater than $banOnProability,
* FALSE otherwise, including errors
* HTTP error codes are NOT explicitly implemented here
* This should be used as a guide, be sure to edit and test it before using it in production
* MIT License
*/
//function requires curl
function checkProxy($ip){
    $contactEmail="admin@mysite.com"; //you must change this to your own email address
    $timeout=5; //by default, wait no longer than 5 secs for a response
    $banOnProbability=0.99; //if getIPIntel returns a value higher than this, function returns true, set to 0.99 by default

    //init and set cURL options
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    //if you're using custom flags (like flags=m), change the URL below
    curl_setopt($ch, CURLOPT_URL, "http://check.getipintel.net/check.php?ip=$ip&contact=$contactEmail");
    $response=curl_exec($ch);

    curl_close($ch);


    if ($response > $banOnProbability) {
        return true;
    } else {
        if ($response < 0 || strcmp($response, "") == 0 ) {
            //The server returned an error, you might want to do something
            //like write to a log file or email yourself
            //This could be true due to an invalid input or you've exceeded
            //the number of allowed queries. Figure out why this is happening
            //because you aren't protected by the system anymore
            //Leaving this section blank is dangerous because you assume
            //that you're still protected, which is incorrect
            //and you might think GetIPIntel isn't accurate anymore
            //which is also incorrect.
            //failure to implement error handling is bad for the both of us
        }
        return false;
    }
}
$ip=$_SERVER['REMOTE_ADDR'];
if (checkProxy($ip)) {
    /* A proxy has been detected based on your criteria
     * Do whatever you want to here
     */
    echo '<META HTTP-EQUIV="Refresh" Content="0; URL=google.com">';    
    exit;
}

}
Var Yan
  • 96
  • 4