在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;
}
我做错了什么?
由于
答案 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;
或者你可能需要将它们全部合并为一个字符串或其他东西,只需要它就可以了。