设置dump show变量时,函数返回NULL

时间:2014-05-07 06:59:36

标签: php

你好,我有一个愚蠢的问题。我想解析Firewall configuration file。我准备了一个脚本,它应该显示文件中第一个条目的所有端口:

    $fileRule = file_get_contents("configurationfile.w");
    $rules = explode(":rule (",$fileRule);
    $rules = array_slice($rules,1,-1);



    foreach($rules as $rule){
        $ports = array();
        if (strpos($rule,'RULE')){
            $serv = getServices($rule);
            $ports = getPorts($serv);
            var_dump($ports);
            exit;break;
        }   

    }

function getServices($ rule)返回一个数组(用var_dump检查)并且变量$serv设置正确。但是函数getPorts($ports的某种结果是空的。

    function getPorts($serv){
        $fileObjects = file_get_contents("objects.C");
        $portss = array();
        $ref = array();
        foreach ($serv as $servPoint){
            $portAll = getBetween($fileObjects,": ($servPoint",":type (");
            if (strpos($portAll,': (ReferenceObject')){
                $portExploded = explode(": (ReferenceObject",$portAll);
                $portExploded = array_slice($portExploded,1);
                foreach($portExploded as $refPort){
                    $refName = getBetween($refPort,":Name (",")");
                    array_push($ref, $refName);
                }
                getPorts($ref);
            }
            else{
                $portAll = getBetween($fileObjects,": ($servPoint",":updated_by_sd");
                $port = getBetween($portAll,":port (",")");
                $type = getBetween($portAll,":type (",")");
                array_push($portss,array($port,$type));
            }
        }

        return $portss;
    }

我检查了变量$portss(在getPorts中返回)和echoed它和变量包含适当的值集,但是在离开函数后它没有被传递。 / p>

任何人都可以给我一个提示我缺少什么?

修改 var_dump($portss)getPorts()的结果

array(4) {
  [0]=>
  array(2) {
    [0]=>
    string(3) "666"
    [1]=>
    string(3) "RDP"
  }
  [1]=>
  array(2) {
    [0]=>
    string(3) "667"
    [1]=>
    string(3) "RDP"
  }
  [2]=>
  array(2) {
    [0]=>
    string(3) "668"
    [1]=>
    string(3) "RDP"
  }
  [3]=>
  array(2) {
    [0]=>
    string(3) "669"
    [1]=>
    string(3) "RDP"
  }
}

1 个答案:

答案 0 :(得分:1)

在函数getPorts的最后一次执行中不可能(记住它是一个递归函数),你拥有所有数据并且不会将它返回到main函数。

我认为问题在于,在函数的最后一次执行中,您返回变量$portss,但它是空的,因为您在函数的开头设置它。

在递归函数中,你需要恢复从里面函数返回的数据,所以你可以做一些事情(我不能给你一个直接的答案,因为你不知道你正在解析的文件)

1.-将此getPorts($ref);更改为此$portss = getPorts($ref);,这样就可以从函数的其他执行中恢复数据。

2.-将返回的变量$portss作为参数传递给函数,以便在最后一次执行时访问它。