使用cURL的错误递归功能

时间:2016-08-17 08:58:13

标签: php codeigniter

在Codeignite控制器中,我有两个功能:索引 get_data 。每个地址的 textarea 和init get_data 的索引获得$_POST(textarea =新地址中的新行)

索引功能:

public function index()
{
    if (isset($_POST['wartosc'])) {
      $adresy = explode("\n", $_POST['wartosc']);
      foreach ($adresy as $lista_adresow) {
            $data['wynik'] = $this->get_data($lista_adresow);
      }
    }
    var_dump($data['wynik']);
    $this->load->view('wynik', $data);
}

Get_data 功能使用 cURL 获取有关地址的信息(IP,重定向网址,http代码itp)。示例此函数必须如何工作:

$_POST['wartosc']='youtube.pl'=>index init get_data()=>cURL返回地址ip,http代码和redirect_url,这是我的问题,因为如果地址有 redirect_url ,我必须再次调用函数get_data()(它必须是递归函数)直到redirect_url==NULL并使用ip和http代码返回所有重定向到索引函数并分配给$data['wynik'],但我只获得部分数据。

获取数据功能

function get_data($adres)
{
    $url = $adres;
    $c = curl_init();
    $opcje = array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => TRUE
    );
    curl_setopt_array($c, $opcje);
    curl_exec($c);
    $info = curl_getinfo($c);
    if (curl_errno($c)) {
        echo 'Błąd #' . curl_errno($c) . ': ' . curl_error($c) . "<br>";
    };
    $tablica = array() + $info;
    if ($tablica['redirect_url'] != NULL) {
     $this->get_data($tablica['redirect_url']);
    }

    return $tablica;
}

我做错了什么?

由于

1 个答案:

答案 0 :(得分:1)

每次运行get_data时,都会返回$ tablica。但是如果从前面的get_data调用开始运行,它会抛弃后面调用的返回值。

$this->get_data($tablica['redirect_url']);

不存储get_data的返回值。

所以你只会得到第一个结果,无论你递归调用它多少次。

您需要通过递归冒泡返回值,或者直接将它们存储在其他变量中。

e.g。你可以拥有你的类的属性叫做“结果”(你可以想到一个更好的名字!)这是一个数组,然后这样做:

$this->results[] = $this->get_data($tablica['redirect_url']);

同样,对get_data的初始调用(在递归之外)应该将输出存储在结果中。

然后最后做这样的事情:

$data['wynik'] = $this->results;

或者你可能需要将它们全部合并为一个字符串或其他东西,只需要它就可以了。