Hallo,

Heb een vraagje over het matchen van een preg_match op een website adres.

De volgende code heb ik gemaakt, wat overigens prima werkt:
<?php
$file_string = file_get_contents('https://website.nl');
preg_match('/"picture"(.*)"title"/', $file_string, $title);
$title_out = $title[1];
echo $title_out ;
?>


Alleen in de broncode van de website komt "title" meerdere malen voor en de preg_match pakt daarbij de laatste "title" op de website. echter wil ik dat hij de eerste de beste "title" na "picture" pakt.
Kan iemand mij hier in helpen? ik ben niet zo erg in thuis maar spelende wijs gaat me het prima af.
misschien zijn er voorbeelden van andere hoe men dit kan oplossen?

alvast bedankt

groetjes Natascha
Dus $titles[0] is dat bovenste blok. $titles[1] is 2e blok.

[0] bevat de ruwe matches: van begin tot eind van je reguliere expressie.
in jouw reguliere expressie staat iets tussen kromme haakjes. (.*)

Per blokje tussen die haakjes krijg je een match. Die vind je in [1], [2] etc.
Maar aangezien jij maar 1 set haakjes hebt, heb jij alleen [1].


Aandacht gaat nu uit naar de matches, dus we kijken naar $titles[1].

daar blijkt dat we in het document 6x een match hadden.
Jouw interesse ging uit naar het 3e plaatje, dus hebben we nummer [2] nodig (we beginnen immers bij 0 te tellen).

Dus <?php echo $titles[1][2]; ?>
jaa wat goed zeg, dit is een echt duidelijke uitleg, werken met de Array's.
Daar zat hem het hem in, nu begrijp ik ook de andere uitleg op die eerder voorbij kwam, php.net, moest daar echt goed begrijpen hoe dat werkte maar ja nu zie ik het.
super leuk en ontzettend bedankt!!!
Ik denk dat ik echt een zeik wijf aan worden ben hoor, excuus me hiervoor.
echt alle dank voor de hulp en het werkt erg mooi, ik kan een foto uit album nu perfect als pic grabben zeg maar.

Maar als ik opdracht wil geven om dit plaatje elke x seconde op nieuw te laden, althans het plaatje niet zelf maar de source ervan.... hoe werkt dit?
Een plaatje verversen werkt wel, daarvoor geef ik een eerdere code mee, maar ik denk, correct me if ik zit fout. dat het plaatjes idd verfrest en niet het PHP script zelf, daardoor word steeds dezelfde plaatje getoond, denk ik.

met:
<?php
preg_match_all('/"picture"(.*?)"title"/', $file_string, $titles);
echo '<pre>' . print_r($titles, 1) . '</pre>';
?>

word perfect het plaatje weergeven, maar hoe krijg ik het zo voor elkaar dat dit x seconden het script opnieuw kijkt of de source een ander plaatje heeft?

Daar had ik eerst een soort van java scriptje voor maar ik denkt dat deze alleen het bestaande plaatje herlaad en niet het script zelf, klopt dat?

<script language="javascript">

function updateImage() {

   obj = document.imagename;

   obj.src = obj.src.split("?")[0] + "?" + new Date().getTime();

   //Following statement sets the delay before the function will

   //call itself again (in milliseconds)

   setTimeout("updateImage()",3000);

}

</script>
dit herlaadt hetzelfde plaatje keer op keer.
Wel met een nieuw getal erachter om werkelijk herladen te forceren.

Maar als plaatje.jpg zelf niet verandert, dan zal plaatje.jpg?133434343 en daarna plaatje.jpg?4324343 steeds hetzelfde tonen.

Dit zou je aan kunnen pakken door

<img src="plaatjelader.php"> te gebruiken, en dan kun je in php steeds opnieuw dat plaatje / een nieuw plaatje proberen op te halen.
Maar dat heeft nog wel een aantal "specials" met headers en dergelijke nodig.
Goedemorgen Ivo,

Bedoel je ermee dat ik een plaatjelader.php maak, en daarin de plaats

<?php
preg_match_all('/"picture"(.*?)"title"/', $file_string, $titles);
echo '<pre>' . print_r($titles, 1) . '</pre>';
?>


deze laden refreshen, begrijp ik dat goed?
Nee, dat bedoel ik niet.

Er zijn een paar mogelijkheden.
De lompste is om de hele huidige pagina te verversen. Maar dat is irritant voor de gebruiker.

Alternatieven zijn om alleen het plaatjes te vervangen. En dan is denk ik het gemakkelijkste om alleen de url van de afbeelding op te vragen.
Dat kan met een ajax call.

Ik werk met jQuery en dan zou dat gaan met:


<img id="hetplaatje" src="https://website.net/images/ed1c6a82f77ff8db8bfd19f370dc9c8e/1000x1000-000000-80-0-0.jpg" >

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
function refresh_my_image() {
    $.ajax({
        cache: false,
        type: 'GET',
        dataType: 'json',
        url: 'JOUW_URL/getplaatje3.php',
        success: function (data)
        {
            // alert om te zien wat opgehaald is
            alert('plaatje: ' + data.plaatje);
            $('#hetplaatje').attr('src', data.plaatje);
        }
    });
}

setInterval(refresh_my_image, 5000);

</script>



Dit script roept elke 5 seconden een url aan naar het script getplaatje3.php

Dat script moet de juiste url oplepelen en teruggeven.
Dat is grotendeels het eerdere script, maar dan moet hij alleen die ene url teruggeven (als json)

<?php
// haal eerst je $file_string binnen he.
preg_match_all('/"picture"(.*?)"title"/', $file_string, $titles);

if(isset($titles[1][2]) {
$response['plaatje'] = $titles[1][2];
header('Content-Type: application/json');
echo json_encode($response);
exit();
}
else {
eader("HTTP/1.1 404 Not Found");
}


?>
Topic gesloten na onnodig inmiddels verwijderd spambericht

Reageren