PHP致命错误;为用户定义的函数调用未定义的函数

时间:2016-03-16 21:07:43

标签: php

我有什么原因导致致命错误:调用未定义函数iptocountry()

$two_letter_country_code=iptocountry($ip);

更新:我搬了$two_lettter_country_code=ipcountry($ip) 到底。

现在我收到了这个错误:

  

警告:include(/ ip_files / :: 1.php):无法打开流:没有这样的   文件或目录

如何删除号码前的::

if ($_SERVER['HTTP_X_FORWARDED_FOR'])
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
else
    $ip   = $_SERVER['REMOTE_ADDR'];


function iptocountry($ip)
{
    $numbers = preg_split( "/\./", $ip);    

    include("/ip_files/".$numbers[0].".php");
    $code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]);    

    foreach($ranges as $key => $value)
    {
        if($key<=$code)
        {
            if($ranges[$key][0]>=$code)
            {
                $country=$ranges[$key][1];break;

        }
    }

    if ($country=="")
    {
        $country="unknown";
    }

    return $country;
}

$two_letter_country_code=iptocountry($ip);

if ($two_letter_country_code=="US")
  die();

包含文件:名称为0到200

<?php
//0-16777215
$ranges=Array(
"0" => array("16777215","ZZ"),
);
?>

2 个答案:

答案 0 :(得分:6)

来自User-defined functions上的PHP文档:

  

在引用函数之前不需要定义函数,除了,当有条件地定义函数时,如下面的两个例子所示。


更准确地说,功能声明是&#34;悬挂&#34; (在声明之前可以使用它们)当它们在全局空间内声明时(即不在其他函数中),但仅在这种情况下。


您的代码可以在全局空间中工作,但它可能位于函数内部,因此forward reference错误。

为了说明,下面的代码正确地调用了global_function,但得到了一个&#34;未定义的函数&#34;尝试致电also_global时出错:     

global_function();

function global_function()
{
    also_global();

    function also_global()
    {
        //...
    }
}

答案 1 :(得分:0)

正如其他人所建议的那样,您在声明之前调用该函数。

最好将您可以在其他PHP脚本中使用的函数定义在单独的文件中,如helpers.php,并在PHP脚本上编写require_once helper.php,这样您就可以在任何地方使用您的函数