2016-08-17 6 views
0

Codeigniteコントローラには、インデックスget_dataという2つの関数があります。インデックスは、TEXTAREAから$_POST値を取得し、各住所(テキストエリア=新しい住所に新しい行)ためget_dataを初期化。cURLを使用した不正な再帰関数

INDEX関数:

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、URLをリダイレクトする、HTTPコードITP)についての情報を取得します。例どのようにこの機能が働かなければならない:

$_POST['wartosc']='youtube.pl'=>index init get_data()=>cURLリターンアドレスのIP、HTTP、コード、およびアドレスはREDIRECT_URLを持っている場合、私はredirect_url==NULLと復帰するまで(それは再帰関数でなければならない)、再び機能get_data()を思い出す必要があるので、ここでREDIRECT_URLとは私の問題ですすべて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; 
} 

私は間違って何をしているのですか?

おかげ

+0

"私はデータの一部分しか取得しません"。どの部分?何が不足していますか、あなたは何を期待していますか? – ADyson

+0

私は再帰が動作しないと思う、get_dataはリダイレクトアドレスのリコール機能なしの最初のアドレスの情報のみを返す – Marcin

+0

多分あなたはデバッグし、$ tablica ['redirect_url']が実際にどのようなものかを見て、それがあなたのNULLテストまたは関数が再帰時に使用できる有効なURLが含まれているかどうかを確認します。または単にメソッドを呼び出した回数がわかるようにカウンタを追加するだけです。 – ADyson

答えて

1

あなたはget_dataを実行するたびに、あなたは$ tablicaを返します。しかし、それが前回のget_data呼び出しから実行された場合、それは後の呼び出しから戻り値をスローします。

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

get_dataの戻り値は格納されません。

何回繰り返して呼び出しても、最初の結果しか返されません。

再帰を介して戻り値をバブルアップするか、他の変数に直接格納する必要があります。

(!あなたがより良い名前を考えることができます)あなたは、配列である「結果」と呼ばれるクラスの性質を持っているし、この操作を行うことができます:

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

同様に(再帰外)get_dataにあなたの最初の呼び出し結果を結果に格納する必要があります。

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

をそれともあなたはそれをする必要がありますしかし、それを行う、それはすべての文字列か何かにマージ必要があります。

は、最終的にこのような何かを。

+0

結果を作成get_dataの配列と関数の終わりに戻りますか? – Marcin

+0

あなたは関数の外に配列を作成しなければなりません(例えば、コンストラクタ内)。関数内では、それだけに追加します。関数内で作成すると、関数を呼び出すたびに上書きされます(今も同じ問題があります)。 – ADyson

+0

ああ、2番目のパラメータとしてget_dataに送信してください – Marcin

関連する問題