PHP致命错误:无法重新声明

时间:2017-01-07 09:38:27

标签: php .htaccess

我尝试过PHP脚本,但它总是给我一个错误。我已经将脚本添加到我的.htaccess中以便每次都自动加载。

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

无论我尝试什么,我都会收到此错误:

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

我的PHP脚本如下:

    <?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;
}

?>

我希望你能提供帮助。

亲切的问候。

2 个答案:

答案 0 :(得分:1)

使用requireinclude两次时会出现此问题。这可以通过找到使用该文件的includerequire的所有实例来解决,并确保使用以下命令进行更改:

require_once "filename";

另一种方法是检查功能是否已经声明,如果是,则不要重新声明。您可以使用function_exists()

来完成此操作
if (!function_exists("checkProxy")) {
  function checkProxy($ip) {
    // rest of function code
  }
}

答案 1 :(得分:0)

将你的函数声明放在if语句

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;
}

}