Curl Function Preg_match_all czyli krew_pot_i_łzy

0

Dzień dobry wszystkim
wiążę się z niesamowitym problemem :)

Najpierw streszczę słownie później podam kod z opisem.

Pragnę pobrać za pomocą CURL kilka informacji z wielu stron.
Zrobiłem kilka znaczników div i do nich ładuję oskalpowane strony za pomocą preg_match_all
Chciałem bardziej to zoptymalizować i użyć do tych operacji funkcję do której będę się odwoływał.
Na samym początku do funkcji wrzuciłem sam kod CURL który pobiera zawartość danej strony.
Do tej funkcji odwołuję się z tych div-ów i działa !

<?php
function pobieranie($www)
{	
//pobieram kod strony z podanego https
$curl = curl_init($www);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$strona = curl_exec($curl);
curl_close($curl);
return $strona;
}
?>

Jednak chciałem do tej funkcji dodać także Preg_match_all które powatażają się w tych div-ach i ... zaczyna się problem.
Wykonuje się tylko pierwszy div a reszta w ogóle.
Jak wyrzuce pierwszy div to wykona się drugi i trzeci już nie chce...

<?php
function funkcja($www,$wyrazenie1,$wwyrazenie2,$wwyrazenie3,$znaczniki){
	
//pobieram kod strony z podanego https
$curl = curl_init($www);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$strona = curl_exec($curl);
curl_close($curl);

//usuwam zbędne znaczniki z wyjątkiem znacznika <a>
function czyste($e){return trim(strip_tags($e,'<a>'));}
	
//wybieram wszystkie tabelki	
if(preg_match_all($wyrazenie1,$www,$wynik)){
    foreach($wynik[1] as $i => $klasa){
		
		//z tabelek wybieram wszystkie znaczniki z klasą KLASA2
		if(preg_match_all($wyrazenie2,$wynik[1][$i],$wynik3)){
            foreach($wynik3[1] as $i3 => $klasa3){
				echo $wynik3[1][$i3];
            }
		}
	
		//z tabelek wybieram wszystkie znaczniki <a> ze znaczników h3
        if(preg_match_all($w3,$wynik[1][$i],$wynik2)){
            foreach($wynik2[1] as $i2 => $klasa2){
				echo czyste($wynik2[1][$i2]);
			}
        }	
		
    }
}

//uwalniam zmienne
unset($curl,$strona,$www,$wyrazenie1,$wyrazenie2,$wwyrazenie3,$wynik,$klasa,$wynik2,$klasa2,$wynik3, $klasa3);
}

?>
0

@ewelROSSA: zauważ jedną rzecz w swoim kodzie

if(preg_match_all($wyrazenie1,$www,$wynik)){
    foreach($wynik[1] as $i => $klasa){

w $wynik dostajesz tablicę ze znalezionymi tabelkami, dlaczego dalej do pętli foreach, wrzucasz tylko pierwszy znaleziony rekord, przekazując do foreach $wynik[1]?

foreach($wynik[1] as $i => $klasa)

zamiast $wynik[1] powinna być tutaj cała tablica $wynik gdzie są znalezione wszystkie tabelki, a nie tylko jedna. Dlatego dostajesz pierwszą tabelką, jak ją usuniesz to dostaniesz tylko drugą itp

0

@Reverse
dziękuję za szybką podpowiedź.
Już poprawiam swój błąd.

Chodzi mi też o wywołanie funkcji z którą jest problem.
Wywołuję ją 5 razy na stronie.
Problem w tym, że wykonuje się tylko pierwsze jej wywołanie.

//tylko to się wykona
funkcja(...);

....
//nie wykonuje się
funkcja(...);
.....
//nie wykonuje się
funkcja(...);

1 użytkowników online, w tym zalogowanych: 0, gości: 1